我想知道,为什么Google会将如此困难传递给对象列表,从1个活动到另一个活动,即使我的活动都在一个进程内?
为什么他们不能只有像
这样的东西intent.putExtra("histories", listOfHistoryObjects);
他们是否过于设计?
答案 0 :(得分:6)
一个原因:
另一个原因:
活动是代表应用程序主要部分的顶级组件。该平台跨过程管理它们;无论活动A和B是否在同一进程中运行,您提供给startActivity()的所有内容都必须通过IPC进入系统进程,系统进程会维护有关该活动的状态,并在活动B时将其交给您的进程。需要创建。它还通过重新启动您的流程来维护这一点。如果允许任何无法通过IPC边界传输的任意Java对象,它就无法做到这一点。
如果您的UI元素紧密耦合,您可以使用Fragment来实现UI的各个部分。此类不是应用程序的顶级部分,也不提供跨进程使用的任何支持,因此可以轻松地在片段或片段及其活动之间进行直接交互。
那说......这仍然不能消除你在第一种情况下正常工作的需要。如果您不打算对片段使用基于Bundle的参数(允许系统自动处理跨流程实例保存的数据),则需要注意实现onSaveInstanceState等正确在适当的状态下重新创建片段。
另外请不要使用Serializable将对象存储到Parcel或Bundle中。正如http://developer.android.com/reference/android/os/Parcel.html#writeSerializable(java.io.Serializable)上的文档所说,与实现Parcelable(甚至只是使用Bundle中的内置基元)相比,这些效率极低。
答案 1 :(得分:1)
只要您保持单个进程,您可以使用标准java技术通过引用传递对象。不需要意图,单例容器在android中就好了。
答案 2 :(得分:0)
我认为你只需要在你的类中实现Serializable 接口。
之后你可以直接写:
intent.putExtra("histories", listOfHistoryObjects);
检查此example以获取详细说明。