Android 在活动之间传递大对象的最佳实践?

Posted

技术标签:

【中文标题】Android 在活动之间传递大对象的最佳实践?【英文标题】:Android The best practice to pass big object between activities? 【发布时间】:2019-11-20 12:23:15 【问题描述】:

我想在两个活动之间传递一个大对象(Parcelable),最好的做法是什么?由于 Parcelable 的限制,我无法使用 Intent:

android.os.TransactionTooLargeException: data parcel size 1002388 bytes

那么,最好的做法是什么?

【问题讨论】:

没有两个活动。有一个活动和两个片段。或者,让对象小心由两个活动都使用的某种单例存储库管理。 我同意@CommonsWare,处理这个问题的最佳方法可能是将数据分解成小片段。 您可以使用ViewModel 从 UI 组件中分离数据。 【参考方案1】:

最佳实践是不要通过活动或片段事务传递整个对象。将文件保存到 DB 或任何本地文件夹并将对象的链接传递给 Acitvity/Fragment 的更好方法(从 DB 或 URI 到文件的 ID)。

val intent = Intent(this, MainActivity::class.java)
intent.putExtra(EXTRA_KEY_FILE_ID, fileId)
startActivity(intent)

【讨论】:

尽管这个答案有效,但它依赖于很多东西。它仅在已经存在任何形式的持久性(文件、数据库等)并且对象可以被唯一识别时才有效

以上是关于Android 在活动之间传递大对象的最佳实践?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个活动托管的片段之间传递数据的最佳实践

Android:如何在包含其他对象的活动之间传递对象

在一些片段之间填充对象变量的最佳方法

Android 通过引用在活动之间传递对象

使用自定义对象时在活动android之间传递数据时出错

Android:在活动之间传递哈希映射