按下后退按钮时会调用onDestroy()

时间:2014-07-30 01:22:12

标签: android android-lifecycle

在我的活动中,我已经覆盖onDestory()并且只是调用日志来显示是否正在调用此方法。 (在Android 4.2.2和4.4.4上测试)

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

当我按下后退按钮时,会调用此方法(我看到了日志)。

我相信除非手机内存不足或其他东西,否则不会发生这种情况。我在应用程序中没有太多东西,只有MainActivity和一些片段。

当用户在MainActivity中并按下后退按钮时,这是日志:

I/MainActivity? onBackPressed() was called
I/MainActivity? onStop() was called
I/MainActivity? onDestroy() was called

为什么会这样?

我还检查了isFinishing()中的onPause(),并且始终返回true

来自Javadoc:

  

在销毁活动之前执行任何最终清理。 这可以   发生要么是因为活动正在结束(有人称为完成   在它上面,或者因为系统暂时破坏了这个实例   节省空间的活动。你可以区分这两者   使用isFinishing方法的方案。注意:不要指望这一点   方法被称为保存数据的地方!

1 个答案:

答案 0 :(得分:8)

当您按下Activity内的后退按钮时,它会拨打finish(),这将关闭"关闭"它

Activity.java

/**
 * Called when the activity has detected the user's press of the back
 * key. The default implementation simply finishes the current activity,
 * but you can override this to do whatever you want.
 */
public void onBackPressed() {
    if (!mFragments.popBackStackImmediate()) {
        finish();
    }
}

当它发生时,onDestroy()可以(并且通常会)被调用。

  

protected void onDestroy()

     

在销毁活动之前执行任何最终清理。这可能是因为活动正在结束(某人称为finish(),或者因为系统暂时销毁此活动实例以节省空间。您可以将这两种情况与isFinishing()方法。

同样的原因也是为什么isFinishing()总是在onPause()内返回true如果按下后退按钮(调用finish()。如果您使用其他方法隐藏true,则不会返回Activity,例如按下主页按钮。