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

Sae*_*ani 6 android android-lifecycle

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

@Override
protected void onDestroy() {
    Log.i(TAG, "onDestroy() was called");
    super.onDestroy();
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

I/MainActivity? onBackPressed() was called
I/MainActivity? onStop() was called
I/MainActivity? onDestroy() was called
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

我也查isFinishing()onPause(),它总是返回true

来自Javadoc:

在销毁活动之前执行任何最终清理.这可能是因为活动正在完成(有人称之为完成,或者因为系统暂时销毁此活动实例以节省空间.您可以使用isFinishing方法区分这两种情况.注意:不要指望这个方法被称为保存数据的地方!

And*_* T. 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();
    }
}
Run Code Online (Sandbox Code Playgroud)

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

protected void onDestroy()

在销毁活动之前执行任何最终清理.这可能是因为活动正在完成(有人称为finish(),或者因为系统暂时销毁此活动实例以节省空间.您可以使用isFinishing()方法区分这两种情况.

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