如何防止在onPause()之后调用onDestroy()?

时间:2011-12-19 04:55:33

标签: android android-webview android-activity android-websettings

在我的Android应用程序中,我注意到按下后退键,在onPause()之后自动调用onDestroy()。

如何阻止应用程序在onPause()之后调用onDestroy()?

我不希望在按下按键后销毁实例。

按Back键,我的webview对象就被破坏了。因此,一旦我按回键,我就无法再次访问webview。

我有两个网址。将它们想象为URL1和URL2。

当我在webview中启动URL1并按回键时,流程为onKeyDown() - >的onPause()

当我在webview中启动URL2并按回键时,流程为onKeyDown() - > onPause() - >的onDestroy()

为什么行为存在差异?它与饼干有什么关系吗?

对于URL1 - cookies.isSecure = true;

对于URL2 - cookies.isSecure = false;

7 个答案:

答案 0 :(得分:3)

这就是Android生命周期的设计方式,你不应该干涉它。无论您是否愿意,您的app都可以在任何时间点被运行时销毁:)所以更好的方法是在应用程序的逻辑中适应生命周期。

答案 1 :(得分:3)

检查您在Manifest中的活动声明。以最小化时可以存储数据的方式声明它。

活动应该具有恢复内容的能力。

答案 2 :(得分:2)

您可以在活动中覆盖onBackPressed(),但这应该是最后的手段,

在开始之前了解这些链接

activity lifecycle

developer blog

答案 3 :(得分:1)

你可以覆盖finish()以避免这种情况:

@Override
public void finish() {
    //super.finish(); // do not call super
    moveTaskToBack(true); // move back
}

答案 4 :(得分:0)

正常的Android应用程序行为表明Home按钮将应用程序隐藏到后台(您将显示主屏幕),Back按钮完成应用程序(按顺序通过onPause,onStop,onDestroy)。 / p>

如果您想在按下后退按钮时保留应用程序的实例/状态,我建议您在onPause中保存 - 将状态保存在SharedPreferences中或保存在sqlite数据库中的某个位置。但请注意,保存过程应尽可能快,因为您的应用程序将等到onPause完全执行后再退出。

然后在onResume中加载实例/状态。

答案 5 :(得分:0)

您可以知道onDestroy()使用onPause()后会调用isFinishing(),因此您可以避免使用某些代码。

答案 6 :(得分:-1)

这里的答案指出我们必须以不应该销毁它的方式配置清单,但它不回答如何配置。当我遇到类似的问题时,我到了这篇文章,解决方案非常简单。提一下

android:persistent="true"

参考: - https://developer.android.com/guide/topics/manifest/application-element.html

这可以防止您在单击后退按钮

时销毁活动

我在另一篇文章中详细解释了一个用例,

Prevent activity from being destroyed as long as possible

我希望这可以帮助那些到达这个地方的人遇到同样的问题