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

时间:2015-02-28 02:31:41

标签: java android

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

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

4 个答案:

答案 0 :(得分:15)

如果您在活动生命周期的某个时刻致电onPause(),则Android通常会致电finish(),除非您在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()调用。

答案 1 :(得分:6)

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

编辑1

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

你为什么打电话给finish();直接在您的活动onCreate()中? F 一般来说,活动如何运作,onPause()将始终保证正在调用..

答案 2 :(得分:3)

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

答案 3 :(得分:0)

现在有点晚,但可能有助于未来的访客。

当我尝试在this tutorial之后为我的应用制作启动画面时,我遇到了onPause()未被调用的问题。

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

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

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

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

但据我所知official Activity documentation在任何其他情况下(至少是正常情况!),保证onPause()方法被调用!