在Android中的Activity之间持久化Intent发送的数据
Posted
技术标签:
【中文标题】在Android中的Activity之间持久化Intent发送的数据【英文标题】:Persist data sent by Intent between Activities in Android 【发布时间】:2016-05-27 14:07:15 【问题描述】:所以我有 AppCompatActivity A
、B
和 C
。从A
,我开始活动B
,传递一个Intent I0
。在 B
´s onCreate
我得到 I0
并根据该数据初始化 UI。现在我打开C
(来自B
)。当我从C
按下android.support.v7.widget.Toolbar
的app:navigationIcon
后退按钮时,再次调用B
的onCreate
,但现在意图I0
不再包含来自getStringExtra("data")
的数据。
我曾尝试使用onSaveInstanceState
和onRestoreInstanceState
,如其他地方所述,但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数据传递)Service和Activity之间-- 借助BroadcastReceiver--的数据传递
Android 逆向启动 DEX 字节码中的 Activity 组件 ( 在 PathClassLoader 和 BootClassLoader 之间插入 DexClassLoader )
Android中的返回键和代码中的finish()之间的区别?
Android中如何使用Intent在Activity之间传递对象[使用Serializable或者Parcelable]