我看到 parcel 和 serializable 可以互换使用,或者至少在同一上下文中不直观。你能为我澄清一些事情吗?
是包裹的持久存储(在磁盘上)或仅存储在内存中
我需要可序列化来将包裹数据存储到磁盘吗
谢谢你的洞察力,不,android开发手册对我来说并不明显
我看到 parcel 和 serializable 可以互换使用,或者至少在同一上下文中不直观。你能为我澄清一些事情吗?
是包裹的持久存储(在磁盘上)或仅存储在内存中
我需要可序列化来将包裹数据存储到磁盘吗
谢谢你的洞察力,不,android开发手册对我来说并不明显
我的回答:
Parcels 用于扁平化对象,因此它们可以存储在 JVM 运行内存之外的其他位置。
您不需要将可序列化与包裹混合以将数据存储到磁盘。一个或另一个就足以将对象存储到磁盘。
Serializable 和 Parcelable 都是扁平化 Java 对象的方法。
这些扁平化的对象可以通过各种传输格式在进程之间传递——包括磁盘文件。
Serializable 来自核心 Java,易于使用。
Parcelable 来自 Android,稍微复杂一些。
这个答案包括更多细节:
https://stackoverflow.com/a/5551155/523135
这篇博文有示例代码 Parcelable:
http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/
这篇博文有示例可序列化代码:
阅读包裹文档。包裹不应放置在持久存储中。
摘抄:
“...Parcel 不是通用的序列化机制。此类(以及用于将任意对象放入 Parcel 的相应 Parcelable API)被设计为高性能 IPC 传输...”
“......将任何 Parcel 数据放入持久存储中是不合适的:Parcel 中任何数据的底层实现的更改都可能导致旧数据不可读。”
http://developer.android.com/reference/android/os/Parcel.html