进行Android开发的时候,我们都知道不能将对象的引用传给Activities或者Fragments,我们需要将这些对象放到一个Intent或者Bundle里面,然后再传递。
通过Android的API,我们知道有两种选择,即在传递对象时,需要对我们的对象进行Parcelable或者Serializable化。
Serializable的作用是为了保存对象的属性到本地文件、数据库、网络流以方便数据传输,当然这种传输可以是程序内也可以是两个程序间。而Android的Parcelable的设计初衷是因为Serializable效率过慢,为了在程序内不同组件间以及不同Android程序间(AIDL)高效的传输数据而设计,这些数据仅在内存中存在,Parcelable是通过IBinder通信的消息的载体。给一个连接可以瞅瞅他们序列化的区别http://greenrobot.me/devpost/android-parcelable-serializable/
Android提供了一种新的类型:parcel(英文解释:包裹,小包),本类用来封装数据的容器,封装后的数据可以通过Intent或IPC传递,除了基本类型外,只有实现了Parcelable接口的类才能放入parcel中。 parcel一般都用在Binder通信,通过read和write方法进行客户端与服务端的数据传递(通信)。
首先我们来看一下官方API对Parcelable的描述:
Interface for classes whose instances can be written to and restored from a Parcel. Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface.
Parcelable的定义
下面我们看看parcelable的源码:
内容描述:
写入接口函数,用来打包:
读取接口,目的是从parcel中构造一个实现了parcelable的类的实例对象,因为实现类这里是不可知的,所以需要用到模板的方法,继承类通过模板参数传入。
为了能够实现模板参数的传入,定义了creator嵌入接口,两个接入函数分别是单个和多个继承类实例。
public interface Creator<T> {
public T createFromParcel(Parcel source);
public T[] newArray(int size);
}
Parcelable的实现使用
参考
1.Android-Parcelable理解与使用(对象序列化) https://my.oschina.net/zhoulc/blog/172163
2.Android的Parcelable接口用法http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html
3.Android Parcelable和Serializable的区别 http://www.cnblogs.com/trinea/archive/2012/11/09/2763213.html
4.Android系统中Parcelable和Serializable的区别 http://greenrobot.me/devpost/android-parcelable-serializable/