在我的Java(Android)类中使用Serializable实现一段时间后,我发现了Parcelable,但我无法找到何时选择其中一个。 它们之间的性能差异是什么?
答案 0 :(得分:10)
对于您使用它们之间的性能差异是什么?
Parcelable
:Serializable
个附加内容,保存的实例状态Parcelable
等等, Intent
明显快于Bundle
。
话虽如此,假设您没有做很多这样的事情,特别是在紧密循环中,用户不太可能真正注意到这种差异。
何时选择一个或另一个
如果您正在进行Android开发,请选择Parcelable
到Serializable
,其中Parcelable
是一个选项。最多使用Serializable
来保持数据持久性,不过我会推荐其他序列化选项(例如,通过Gson的JSON)。
这样做的一个主要例外是,如果您的Java对象位于可以从Android和其他Java环境中使用的单独库中。这些环境不会Parcelable
,但Serializable
可以在两个地方都有效。
答案 1 :(得分:3)
Parcelable协助在Android组件之间传递数据。 Binder将要发送的包裹编组,发送和接收,然后在另一侧解组,以重建原始包裹的副本。
w.r.t Serializable您只需要在类及其子类上实现Serializable接口。它是一个标记接口,意味着没有方法可以实现,Java将尽最大努力有效地序列化它。它使用反射,它往往会创建大量的临时对象并导致相当多的垃圾收集。
根据Google工程师Parcelable的速度比Serializable快10倍以上。在Parcelable中,开发人员编写用于编组和解组的自定义代码,因此与序列化相比,它创建的垃圾对象更少。
您可以在此处查看示例代码,以了解实施差异 - Android: Difference between Parcelable and Serializable?
小心点?
检查以下项目以避免手动编写Parcelable。
答案 2 :(得分:0)
Parcelable对于android更好: 1.它更快 2.它不使用反射(Serializable使用反射)