繁体   English   中英

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

[英]onDestroy() gets called when the back button is pressed

在我的Activity中,我已经覆盖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

为什么会这样?

我还在onPause()检查了isFinishing() onPause() ,它总是返回true

来自Javadoc:

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

按下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() 如果您使用其他方法隐藏Activity ,例如按主页按钮,则不会返回true

暂无
暂无

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

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