将对象数组传递给活动(或视图)的最佳方法是什么?

时间:2017-12-31 15:05:00

标签: android android-intent arraylist parcelable

我一直在寻找一种方法将对象数组传递给我的activity / fragment。我想到的第一件事就是让对象Parcelable然后将它作为列表传递到intent中。但是,Parcelable概念主要用于跨进程边界使用,例如,当您想要开始新活动或发送广播时。这就是为什么它还建议在意图中保持较小的东西(最好是几KB),因为每个进程都有自己的私有绑定器事务缓冲区,以便在操作系统级别使用。

我的第一个问题是你认为我可能会错过上述论点中的一些观点吗?

其次,当我使用LocalBroadcastManager发送我的广播时,意图内的数据是否仍然下降到操作系统级别以进行编组/解组并传递回进程?如果它没有,那么传递相对较大的阵列可能更有意义,因为它不会代表我的进程占用操作系统内存中的任何共享空间(假设数据不会离开我的app使用LocalBraodcastManager时。

希望它清楚!

2 个答案:

答案 0 :(得分:1)

如果您有很多对象,那么在将它们从您的应用程序的一个组件发送到另一个组件时序列化和反序列化(parcel和unparcel)是没有意义的。假设您的应用程序的所有组件都位于相同的操作系统进程中(这是默认行为),您可以通过将这些对象放入static成员变量来共享这些对象。有关示例,请参阅https://stackoverflow.com/a/10909959/769265

这种方法有缺点。如果Android终止了您的流程,当用户返回应用时,可能尚未设置static成员变量。您需要处理这种情况并采取相应行动。

处理大对象(或大对象数组)的其他方法是:

  • 存储在SharedPreferences中(您需要将对象序列化为字节流以将其保存在SharedPreferences
  • 存储在SQLite数据库中(您可以使用自定义架构并按照您的需要高效或低效地存储数据)
  • 存储在一个文件中(您可以将数据序列化为字节流并写入文件,或者您可以使用Java提供的方法来编写"对象"到文件)

答案 1 :(得分:0)

使用bundle对象,它使用字符串键 - 对象配置,并且它非常易于使用