在我的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;
答案 0 :(得分:3)
这就是Android生命周期的设计方式,你不应该干涉它。无论您是否愿意,您的app都可以在任何时间点被运行时销毁:)所以更好的方法是在应用程序的逻辑中适应生命周期。
答案 1 :(得分:3)
检查您在Manifest中的活动声明。以最小化时可以存储数据的方式声明它。
活动应该具有恢复内容的能力。
答案 2 :(得分:2)
答案 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
我希望这可以帮助那些到达这个地方的人遇到同样的问题