在我的活动中,我已经覆盖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方法的方案。注意:不要指望这一点 方法被称为保存数据的地方!
答案 0 :(得分:8)
当您按下Activity
内的后退按钮时,它会拨打finish()
,这将关闭"关闭"它
/**
* 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
,例如按下主页按钮。