我一直在寻找一种方法将对象数组传递给我的activity / fragment。我想到的第一件事就是让对象Parcelable然后将它作为列表传递到intent中。但是,Parcelable概念主要用于跨进程边界使用,例如,当您想要开始新活动或发送广播时。这就是为什么还建议在意图中保持较小的东西(最好是几KB),因为每个进程都有自己的私有绑定器事务缓冲区,以便在操作系统级别使用。
我的第一个问题是你认为我可能会错过上述论点中的一些观点吗?
其次,当我使用LocalBroadcastManager发送我的广播时,意图内的数据是否仍然下降到操作系统级别以进行编组/解组并传递回进程?如果没有,也许更有意义的是传递相对较大的数组,因为它不会代表我的进程占用操作系统内存中的任何共享空间(假设数据在使用LocalBraodcastManager时不会离开我的应用程序)。
希望它清楚!
如果你有很多对象,那么在将它们从你的app的一个组件发送到另一个组件时序列化和反序列化(parcel和unparcel)是没有意义的。假设您的应用程序的所有组件都位于相同的OS进程中(这是默认行为),您可以通过将它们放在static
成员变量中来共享这些对象。有关示例,请参阅https://stackoverflow.com/a/10909959/769265。
这种方法有缺点。如果Android杀死您的进程,当用户返回应用程序时,可能尚未设置static
成员变量。你需要处理这种情况并采取相应的行动。
处理大对象(或大对象数组)的其他方法是:
SharedPreferences
中(您需要将对象序列化为字节流以将其保存在SharedPreferences
中)使用bundle对象,它使用字符串键 - 对象配置,并且它非常易于使用