在我的活动中,我有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(), ,这将"关闭"它。

活动。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() 可以(并且通常会)被调用。

受保护的无效onDestroy()

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

同样的原因也适用于为什么把 isFinishing() 里面 onPause() 总是回来 true, 如果按下后退按钮(呼叫 finish()).它不会回来 true 如果你把 Activity 用其他方法,例如按下主页按钮。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top