3

我看到 parcel 和 serializable 可以互换使用,或者至少在同一上下文中不直观。你能为我澄清一些事情吗?

  1. 是包裹的持久存储(在磁盘上)或仅存储在内存中

  2. 我需要可序列化来将包裹数据存储到磁盘吗

谢谢你的洞察力,不,android开发手册对我来说并不明显

4

2 回答 2

4

我的回答:

  1. Parcels 用于扁平化对象,因此它们可以存储在 JVM 运行内存之外的其他位置。

  2. 您不需要将可序列化与包裹混合以将数据存储到磁盘。一个或另一个就足以将对象存储到磁盘。


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/

这篇博文有示例可序列化代码:

http://www.javapractices.com/topic/TopicAction.do?Id=45

于 2012-05-03T18:07:32.237 回答
2

阅读包裹文档。包裹不应放置在持久存储中。

摘抄:

“...Parcel 不是通用的序列化机制。此类(以及用于将任意对象放入 Parcel 的相应 Parcelable API)被设计为高性能 IPC 传输...”

“......将任何 Parcel 数据放入持久存储中是不合适的:Parcel 中任何数据的底层实现的更改都可能导致旧数据不可读。”

http://developer.android.com/reference/android/os/Parcel.html

于 2015-09-10T07:27:58.137 回答