Android - 在活动重新创建期间是不是保留了意图?

Posted

技术标签:

【中文标题】Android - 在活动重新创建期间是不是保留了意图?【英文标题】:Android - Is the intent preserved during activity recreation?Android - 在活动重新创建期间是否保留了意图? 【发布时间】:2013-03-03 02:04:42 【问题描述】:

我正在构建一个 android 应用程序,并想询问启动活动的意图(可通过 getIntent () 方法访问)是否在活动重新创建期间被保存/保存,例如设备方向,或者仅仅是android可以在后台删除应用程序状态并重建它(如果内存不足)的事实?

这是一个说明问题的简单示例:

应用程序启动活动 A。然后用户点击一个按钮开始一个新的活动B。活动 A 通过意图向活动 B 发送了一个字符串 X,其值为 Hello(使用 >putExtra 方法)。

在活动B中,我可以通过检索意图(通过getIntent()方法)来检索字符串X的内容,然后检索字符串内容(通过 getStringExtra 方法)。

如果由于设备旋转而重新创建了活动,我是否仍然能够从 Intent 中检索额外的字符串,甚至是 Intent 本身...?

或者我应该在 onSaveInstanceState 方法中保存额外的字符串吗?

我已经尝试过设备旋转场景,并且意图(以及额外的字符串)总是可以访问的。

【问题讨论】:

【参考方案1】:

如果由于设备旋转而重新创建活动,我是否仍然能够从意图中检索额外的字符串,甚至是意图本身

是的。配置更改后,您将拥有与配置更改前相同的Intent(或至少是Intent 的副本)。

【讨论】:

不只是配置更改,如果应用程序进入后台然后Android删除应用程序实例以释放一些内存怎么办?恢复后,意图(或您指出的副本)及其额外数据是否可用? @Leeeeeeelo:“当它恢复时,意图(或您指出的副本)及其额外数据是否可用?” - 这取决于它是如何“恢复”的。如果用户只是点击启动器图标,那么不会。如果用户使用最近的任务列表,那么是的。 感谢您的及时答复! @CommonsWare 我指的是由于内存限制场景而被杀死的后台进程,如果用户通过点击图标重新启动进程(和顶部堆栈活动),则不会保留额外内容。有问题的活动会收到哪些额外费用?我的假设是否正确,即这个最近的活动(以及堆栈中的所有先前活动)将被启动?你的书中有解释过这样的场景吗?再次感谢。 @CommonsWare 好吧,对我来说,通过从最近任务列表中删除应用程序用户也“重置”它的状态是很合理的,所以它只会启动启动器活动(而不是我当前的活动)。所以,总结一下:当最近的任务列表完好无损时,可以安全地假设我当前的活动将始终收到相同的intentonCreate 中的额外内容,对吗?我没有挖掘代码来支持这种说法,也没有在文档中看到它,但我绝对相信你。

以上是关于Android - 在活动重新创建期间是不是保留了意图?的主要内容,如果未能解决你的问题,请参考以下文章

如果重新创建活动,是不是会调用 onNewIntent 或 onActivityResult?

在 Android 的 AsyncTask 期间更改活动是不是被认为是不好的做法?

防止android在崩溃后重新创建活动堆栈

当活动从后台(暂停)到前台时重新创建 Android 活动

理解 Fragment 的 setRetainInstance(boolean)

安卓系统的开发人员选项中的“不保留活动”,和“后台进程限制”中的“不允许后台进程”或“只允许一个后