我想知道,为什么谷歌很难将对象列表从1个活动传递到另一个活动,即使我的活动都在一个进程中?
他们为什么不能拥有类似的东西
intent.putExtra("histories", listOfHistoryObjects);
Run Code Online (Sandbox Code Playgroud)
它们是否过于设计?
一个理由:
另一个原因:
活动是代表应用程序主要部分的顶级组件.该平台跨过程管理它们; 无论活动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中的原语中).
| 归档时间: |
|
| 查看次数: |
476 次 |
| 最近记录: |