在我的活动 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 中读取一些设置。
答案 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 -> onResume
和onStop -> onRestart -> onStart -> onResume
)
答案 1 :(得分:0)
可能是因为设备设置中的开发人员选项(后台处理限制)已打开。或系统杀死了你的活动。 在我看来,你不应该依赖最常见的生命周期。如果内存不足,您的活动可能会被破坏。所以你应该像Ari所说的那样保存活动的实例状态。