当按下后退按钮时,onDestroy()被调用
-
21-12-2019 - |
题
在我的活动中,我有overrode onDestory()
只需放置一个日志调用,以显示是否正在调用此方法。(在Android4.2.2和4.4.4上测试)
@Override
protected void onDestroy() {
Log.i(TAG, "onDestroy() was called");
super.onDestroy();
}
当我按下后退按钮时,这个方法被调用(我看到了日志)。
我相信这不应该发生,除非手机内存不足或其他什么。我在应用程序中没有什么东西,但主要活动和一些片段。
这是当用户处于MainActivity并按下后退按钮时的日志:
I/MainActivity? onBackPressed() was called
I/MainActivity? onStop() was called
I/MainActivity? onDestroy() was called
为什么会这样?
我还检查了 isFinishing()
在 onPause()
它总是回来 true
来自Javadoc :
在销毁活动之前执行任何最终清理。 这可以 发生了 要么是因为活动正在结束(有人叫finish 上,或者因为系统正在暂时销毁这个实例 活动以节省空间。你可以区分这两个 使用isFinishing方法的场景。注:不要指望这个 方法被称为保存数据的地方!
解决方案
当你按下后退按钮内 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()
可以(并且通常会)被调用。
受保护的无效onDestroy()
在销毁活动之前执行任何最终清理。这可能发生,因为活动正在完成(有人在上面叫finish(), ,或者因为系统正在暂时销毁活动的此实例以节省空间。您可以使用isFinishing()方法区分这两种情况。
同样的原因也适用于为什么把 isFinishing()
里面 onPause()
总是回来 true
, 如果按下后退按钮(呼叫 finish()
).它不会回来 true
如果你把 Activity
用其他方法,例如按下主页按钮。
不隶属于 StackOverflow