Android Parcel,存储在内存中还是磁盘上?如何存储在磁盘上?

4
我看到parcel和serializable有些互换使用,或者至少在同一语境下不是很直观。你能帮我澄清一些问题吗?
  1. parcel是持久存储(在磁盘上)还是仅存在内存中?
  2. 我是否需要serializable将parcel数据存储到磁盘中?
感谢您的见解,不过,对我来说,安卓开发手册并没有明确说明这一点。
2个回答

4

我的回答:

  1. Parcel是为了将对象展平,以便可以将它们存储在JVM的运行内存之外。

  2. 您不需要将序列化与包裹混合使用来将数据存储到磁盘中。其中一个就足以将对象存储到磁盘中。


Serializable和Parcelable都是展平Java对象的方法。

这些展平的对象可以通过各种传输格式(包括磁盘文件)在进程之间传递。

Serializable来自核心Java,易于使用。

Parcelable来自Android,稍微复杂一些。

这个答案包含更多细节:

https://dev59.com/8m035IYBdhLWcg3wNtRw#5551155

此博客文章提供了Parcelable的示例代码:

http://blog.cluepusher.dk/2009/10/28/writing-parcelable-classes-for-android/

此博客文章提供了Serializable代码的示例:

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


3
阅读Parcel文档。Parcel不应放置在持久存储中。
摘录:
“... Parcel不是通用的序列化机制。这个类(以及相应的Parcelable API,用于将任意对象放入Parcel中)被设计为高性能IPC传输...”
“...不适合将任何Parcel数据放入持久存储中:对Parcel中任何数据的底层实现的更改可能会使旧数据无法读取。”

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接