Android—序列化对象—Parcelable

来源:互联网 发布:大数据时代的喜与忧 编辑:程序博客网 时间:2024/06/06 05:05

Java中,序列化对象一般都会使用 Serializable 去序列化对象,然后通过对对象的持久化操作。

在Android中,也有Android特有的序列化的东西,那就是Parcelable,它也可以序列化对象<但是:Parcelable不适合持久化>。

下面来看看怎么使用Parcelable。

先来看看需要序列化的实体类:


再来看看怎么使用:



下面解释一下上面这段代码。
先来看看Person类,该类实现了Parcelable接口,该接口的需要实现的两个方法分别是:describrContents 和 writeToParcel
describrContents():这个方法有什么用呢?网上看了一大堆的demo都没提到过这个方法是干啥用的,桑心,然后google了一番,又去翻了翻api,看的似懂非懂的,最后去问了一个哥们才搞懂这个是干嘛用的,这里对那位热心的哥们表示感谢!谢谢。。。首先我们来看方法名,方法名直接翻译过中文来时是:“内容描述” 那它返回来的又有什么用呢?为什么要返回0呢?这个方法到目前为止返回的唯一的有效值是CONTENTS_FILE_DESCRIPTOR(0X01)<1是有效值,那么0就是无效值>,指明这个parcel的内容包含文件内容描述符,在DropBoxManager、ParcelFileDescriptor和InputChannel等用到这个值。describeContents是个Pacel对象中控制文件描述符状态的标记位,非0即1,返回0时不能使用文件描述符,如果返回1就可以拿到远程的文件句柄,并可以修改远程文件,所有一般返回0保证文件安全。(总结起来就一句话:返回0是用来标记它不是一个文件,不能按照文件的方式去处理这个对象).
writeToParcel:
这个方法很好理解了,看方法名和方法里面的内容也就知道这个方法是干嘛用的了,这个方法是依次写入该对象中的每个属性。
最后还有一个必须要的,那就是:CREATOR,这个很重要。没有它也是万万不行的,这也是一个接口(Parcleable.Creator)的对象,这个名字CREATOR是固定的,并且必须是大写的,否则无效。里面有两个方法,一个是newArray,返回一个序列化对象的数组,还有一个方法是createFromParcel,这个方法的作用是反序列化。也就是说把Parcel对象反序列化成原来的对象,也就是Parcleable.Creator传进来的泛型。
最后的那几个方法就是 age 和 name 的 get 和 set 的方法了,最后重写了 toString ,这些都没什么好说的。
Person 类就解释到这里,下面来看一下怎么使用,


使用的话,无非就是将一个对象序列化成parcel对象,然后通过Intent传输,再接收端进行反序列的操作,最后得到结果。
MainActivity 中,包含两个 EditText 和一个提交 Button ,两个输入框分别用于接收 age 和 name 。之后为 submit 添加了一个点击事件,点击事件中是获取 age 和 name ,然后构造一个 Person 对象,然后 Put 到 Intent 里面去,最后通过 Intent 传输。
TargetActivity中,直接把传过去的 Parcel 对象 get 出来,最后设置到 TextView 中,显示出来,就这么简单,没什么了。


序列化还可以参考一下:

Java—序列化—Serializable—Externalizable

Java—Android—Serializable—Parcelable对比


0 0
原创粉丝点击