android对象序列化
‘壹’ java android 实现parcelable序列化,为什么必须要实现CREATOR
你好:
Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在IPC中。实现Serializable接口非常简单,声明一下就可以了,而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。下面就介绍一下实现Parcelable接口的方法
通过实现Parcelable接口序列化对象的步骤:
1、声明实现接口Parcelable
2、实现Parcelable的方法writeToParcel,将你的对象序列化为一个Parcel对象
3、实例化静态内部对象CREATOR实现接口Parcelable.Creator:
Java代码
public static final Parcelable.Creator<T> CREATOR
其中public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。
4、完成CREATOR的代码,实现方法createFromParcel,将Parcel对象反序列化为你的对象
简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
Parcel对象可以通过以下方法写入或读取byte, double, float, int, long, String这6种类型变量。
‘贰’ Android Intent传递对象为什么要序列化,序列化有那几种方式
我们都知道进行android 开发的时候,跳转到Activity和Fragment的时候,传递对象是通过Intent或者bundle 进行传递。当这个对象没有实现序列化的时候 当你通过Inetnt传递的时候会报红,系统会提示你将这个对象实现序列化。
1.先了解一下 什么是序列化。通过对《Android 开发艺术探索》可以知道序列化是将一个对象转化成可存储可传输的状态,序列化后的对象可以在网络上传输,也可以存储到本地。
2.回到我们的主题,那为什么要序列化呢?<大致有三个原因>
a.永久性保存对象,保存对象的字节序列到本地文件中
b.对象可以在网络中传输
c.对象可以在IPC之间传递
3.序列化有那几种方式呢<有两种方式>
android自定义对象可序列化有两个选择一个是Serializable和Parcelable
4.它们之间有什么区别?
a.在使用内存的时候Parcelable比Serializable的性能高。
b.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC(内存回收)。
c.Parcelable不能使用在将对象存储在磁盘上这种情况,因为在外界的变化下Parcelable不能很好的保证数据的持续性。
d.实现Serializable很简单 因为Serializable是一个空接口 所以只要在在实体类中实现这个接口即可 Parcelable就稍微复杂了一点了
这里有实现Parcelable 这个接口的列子 blog.csdn.net/jaycee110905/article/details/21517853
‘叁’ Android系统中Parcelable和Serializable的区别
都是序列化对象 使得可以传递对象
Serializable 是java自带的序列化方式 使用简单只需要把对象implement就可以序列化
但是此方法相对Parcelable来说性能比较低
Parcelable是android写的一种序列化方式使用需要一些步骤
参考文档:http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html