2

在我的 android 应用程序中,我注意到在按下返回键时,在 onPause() 自动之后,onDestroy() 被调用。

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

我不想在按回键后破坏实例。

按后退键,我的 webview 对象被破坏。所以,一旦我按下返回键,我就无法再次访问 webview。

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

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

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

为什么行为会有所不同?和饼干有关系吗?

对于 URL1——cookies.isSecure=true;

对于 URL2——cookies.isSecure=false;

4

7 回答 7

3

这就是 Activity 生命周期在 Android 中的设计方式,您不应干预它。无论您是否想要,您的应用程序都可以在任何时间点被运行时销毁:) 因此,更好的方法是在应用程序的逻辑中适应生命周期。

于 2011-12-19T04:58:37.853 回答
3

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

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

于 2011-12-20T12:07:10.323 回答
2

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

@Override
public void finish() {
    //super.finish(); // do not call super
    moveTaskToBack(true); // move back
}
于 2013-08-05T12:43:04.997 回答
2

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

在开始之前掌握这些链接

活动生命周期

开发者博客

于 2011-12-19T06:44:47.720 回答
0

你可以知道使用onDestroy()后会调用它,这样你就可以避免一些代码。onPause()isFinishing()

于 2013-06-15T17:00:13.030 回答
0

正常的 android 应用程序行为表明 Home 按钮将应用程序隐藏到后台(您将看到主屏幕),并且 Back 按钮完成应用程序(按顺序通过 onPause、onStop、onDestroy)。

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

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

于 2011-12-19T06:53:34.943 回答
-1

这里的答案指定我们必须以不被破坏的方式配置清单,但它没有回答如何配置。当我遇到类似问题时,我到达了这篇文章,解决方案非常简单。只提

android:persistent="true"

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

当您单击后退按钮时,这应该可以防止您的活动被破坏

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

尽可能长时间地防止活动被破坏

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

于 2016-03-04T06:55:03.397 回答