繁体   English   中英

Android:是否保证在finish()之后调用onPause()?

[英]Android: Is onPause() guaranteed to be called after finish()?

无法在任何地方找到可靠的答案。 我有一个方法,其中调用finish(),然后调用onPause()。

是否保证在调用finish()后调用onPause()?

如果你在Activity的生命周期中的某个时刻调用finish() ,Android通常会调用onPause() ,除非你在onCreate()调用finish() onCreate()

public class MainActivity extends ActionBarActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    finish();
  }



  @Override
  protected void onPause() {
    super.onPause();
    Log.d(TAG, "onPause");
  }

  @Override
  protected void onStop() {
    super.onStop();
    Log.d(TAG, "onStop");
  }

  @Override
  protected void onDestroy() {
    super.onDestroy();
    Log.d(TAG, "onDestroy");
  }
}

运行,并观察您的日志将只包含“onDestroy”。 几乎在其他任何地方调用finish() ,你会看到onPause()被调用。

系统将此方法称为用户离开您的活动的第一个指示(尽管并不总是意味着活动正在被销毁)。 这通常是您应该提交应该在当前用户会话之外保留的任何更改的地方(因为用户可能不会回来)。 所以onPause()是有保证的。 这里的官方文档

编辑1

onCreate()onDestroy() && onStart()onStop() && onResume()onPause() .. onStart()是在onCreate()完成其工作时调用的。 如果不是它没有被调用.. onResume()表示ui即将被显示给用户 - (活动的内容是用户看到的屏幕)。 如果在onCreate()调用finish() ,则会跳过onPause()因为onResume()从未被调用过相同的onStart() ..所以在某些情况下你可以说它不是; 但那将是错误的,因为什么是不是屏幕的活动或者作为屏幕的容器 - (片段)。

为什么你会叫完(); 直接在你的Activity的onCreate() f光盘活动的一般工作原理, onPause()将始终保证呼吁..

是的,每当你的活动消失时,都会调用onPause。

这有点晚,但可能会帮助未来的访客。

当我尝试按照本教程为我的应用程序制作启动画面时 ,我遇到了onPause()未被调用的问题。

经过一番摆弄并强迫我的思绪,我想出了原因! onCreate()方法如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    Intent intent = new Intent(this, MainActivity.class);
    startActivity(intent);
    finish();
}

因此,在活动有机会开始恢复之前,我强迫它完成,因此绕过其他状态方法调用

但据我所知,在任何其他情况下的官方Activity文档中(至少是正常的!),保证调用onPause()方法!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM