在Android中的Activity之间持久化Intent发送的数据

Posted

技术标签:

【中文标题】在Android中的Activity之间持久化Intent发送的数据【英文标题】:Persist data sent by Intent between Activities in Android 【发布时间】:2016-05-27 14:07:15 【问题描述】:

所以我有 AppCompatActivity ABC。从A,我开始活动B,传递一个Intent I0。在 B´s onCreate 我得到 I0 并根据该数据初始化 UI。现在我打开C(来自B)。当我从C 按下android.support.v7.widget.Toolbarapp:navigationIcon 后退按钮时,再次调用BonCreate,但现在意图I0 不再包含来自getStringExtra("data") 的数据。

我曾尝试使用onSaveInstanceStateonRestoreInstanceState,如其他地方所述,但onRestoreInstanceState 未被调用,savedInstanceState Bundle 在onCreate 中为null

所以我想知道是否有办法保留 Activity B 的 UI 状态(不破坏它?)或 Intent I0的额外数据?

我在 Github 上创建了一个Example

【问题讨论】:

启动activity C时,不要关闭(确切地说是不要调用finish())activity B,这样Activity B会一直在backstack中,因此不会再次初始化. @nobalG 从 B,我只是用 C 调用 startActivtity - 我如何不破坏 B? When i press the back button from C, B's onCreate is called again, but now the Intent I0 is null - so initialization fails this time。这显然不是真的,您将拥有与第一次启动活动 B 相同的 Intent @pskink 你是对的;意图不为 null,但对 getStringExtra 的调用返回 null 不,它也有相同的附加功能 【参考方案1】:

感谢@pskink 建议在Activity B 上设置android:launchMode="singleTop"。这解决了我的问题,B 没有使用无效的 Intent 重新创建。

【讨论】:

以上是关于在Android中的Activity之间持久化Intent发送的数据的主要内容,如果未能解决你的问题,请参考以下文章

Android开发 - 文件保存状态和首选项

(Android数据传递)Service和Activity之间-- 借助BroadcastReceiver--的数据传递

Android 逆向启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )

Android中的返回键和代码中的finish()之间的区别?

Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]

Android中点击按钮启动另一个Activity以及Activity之间传值