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

问题描述 投票:0回答:2

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

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

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

希望它清楚!

android android-intent arraylist parcelable
2个回答
1
投票

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

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

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

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.