在应用程序中,在活动之间传递自定义对象的最佳方法是什么?

Ash*_*win 2 android

我知道这个问题已被多次询问,而且我已经经历了很多这些问题......几乎所有这些问题都为你的课程提供了可以使用的parcelable界面.然而在几个问题中,我遇到了一个引文:

"注意:看到Parcelable可能引发了这个问题,为什么Android没有使用内置的Java序列化机制?事实证明,Android团队得出结论,Java中的序列化速度太慢,无法满足Android的进程间通信因此,团队构建了Parcelable解决方案 .Parcelable方法要求您明确地序列化类的成员,但最终,您可以更快地对对象进行序列化.还要意识到Android提供了两种机制,允许您将数据传递给另一个进程.第一个是使用intent将bundle传递给一个活动,第二个是将Parcelable传递给一个服务.这两个机制是不可互换的,不应该混淆.也就是说,Parcelable是并不意味着要传递给一个活动.如果你想启动一个活动并传递一些数据,请使用一个包.Parcelable只能作为AIDL定义的一部分使用."

这个引用也可以在Pro Android 2一书中找到.

现在看到同一个应用程序中的所有活动都在同一个进程中运行(Android中的每个活动都是一个进程,或者一个应用程序是一个进程),除非清单中另有说明,否则同一应用程序的活动内的通信不是进程间通信所以.使用parcelable类真的更快,还是只是通过意图通过bundle传递你的对象属性?

在很大程度上赞赏这方面的任何亮点.干杯!!

Ted*_*opp 8

有一个常见问题解答.:)

简短的回答是,Android团队推荐了三种在应用程序中的活动和服务之间传递数据的技术:单例类; 公共静态字段或方法; WeakReferences to Objects的HashMap(并在intent中传递密钥).要记住的主要问题是您的数据在各种生命周期事件下的行为方式.(例如,如果用户打开手机,默认情况下您的活动将被销毁并重新创建;您的数据处理方法需要考虑到这一点.)


Fem*_*emi 5

Parcelable构造被设计为在跨应用程序内存边界传递数据时非常快:在应用程序中,使用Bundle可以更好地服务,因为发送者和接收者都可以访问存储数据的所有内存位置.由于内存中的对象是可访问的,因此不需要承担重建的成本:只需使用Bundle,它实际上只是一种HashMap特定于类型的put/get方法的美化.

对于AIDL和IPC目的,您不能(默认情况下)共享内存位置,因此您需要一种有效的数据移动方式:这是Parcelable开始的地方.除非您的应用程序的某个组件使用remote过程功能,否则不需要使用Parcelable.