Android - 防止从Web浏览器返回时重新创建活动

时间:2014-03-10 12:00:22

标签: android android-activity recreate

在我的活动 B 中,我有选项“帮助”,可在网络浏览器中打开网址。从Web浏览器返回时(使用后退键),将重新创建活动。为什么会发生这种情况以及如何防止这种情况发生?

修改 这就是我称之为网络浏览器的方式:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.help_url)));
startActivity(browserIntent);

从浏览器返回时,onCreate()被调用;

我的逻辑操作:启动应用时,活动 A 会读取设置并将其写入活动/类 C 。之后,我开始激活 B 并完成()活动 A 。在活动 B 中,onCreate()方法正在从活动 C 中读取一些设置。

2 个答案:

答案 0 :(得分:1)

为此,您必须在开始浏览之前完成Activity

将您的代码更改为:

Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.help_url)));
finish(); // should be called from your current activity
startActivity(browserIntent);

Android不会将当前Activity的所有信息存储到其他信息(即WebBrowser),因此必须重新创建活动以再次显示该信息。

如果从Activity返回后仍然需要此WebBrowser,则无法阻止Android重新创建它。您应该保存所有需要覆盖onSaveInstanceState并使用Activity重新创建savedInstanceState

看看Activity lifecycle。当Android需要为其他进程释放一些内存时,它可能会杀死你的应用程序(在后台)。还有其他可能的路径返回到Activity运行状态,但不会重新创建它。 (onPause -> onResumeonStop -> onRestart -> onStart -> onResume

答案 1 :(得分:0)

可能是因为设备设置中的开发人员选项(后台处理限制)已打开。或系统杀死了你的活动。 在我看来,你不应该依赖最常见的生命周期。如果内存不足,您的活动可能会被破坏。所以你应该像Ari所说的那样保存活动的实例状态。