1

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

编辑: 这就是我调用网络浏览器的方式:

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

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

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

4

2 回答 2

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);

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

如果您Activity在回来后仍然需要它,WebBrowser则无法阻止 Android 重新创建它。您应该保存所有需要覆盖onSaveInstanceState并重新创建Activityusing savedInstanceState.

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

于 2014-03-10T12:17:05.770 回答
0

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

于 2014-03-10T12:44:16.027 回答