Parcelables
遵循Parcelable协议的对象可以通过Parcel来存取,如开发人员经常用到的bundle就是继承自Parcelable的,相关方法:
writeParcelable(Parcelable,int):将这个Parcelable 类的名字和内容写入Parcel中,实际上他是通过回调此Parcelable的writeToParcel()方法来写入数据。
readParcelable(ClassLoader):读取并返回一个新的Parcelable对象。
writeParcelableArray(T[ ],int):写入Parcelable对象数组
readParcelableArray(ClassLoader):读取并返回一个Parcelable对象数组。
Bundles
上面提到,Bundle继承自Paracelable,是一种特殊的type-safe的容器。Bundle的最大特点就是采用键值对的方式存储数据,并在一定程度上优化了读取速率。这个类型的Parcel操作:
writeBundle(Bundle):将Bundle写入parcel.
readBundle():读取并返回一个新的Bundle对象
readBundle(ClassLoader):读取并返回一个新的Bundle对象,ClassLoader用于Bundle获取对应的Parcelable对象
Active Objects
Parcel的另一个强大的武器就是可以读写Active Objects--------------通常我们存入Parcel的对象的内容,而Active Objects写入的则是他们的特殊标志引用。
所以在从Parcel中读取这些对象时,大家看到的并不是重新穿件的对象实例,而是原来那个被写入的实例。
(1)Binder一方面是android系统IPC通信的核心机制之一,另一方面也是一个对象。利用Parcel将Binder对象写入,读取时就能得到原始的Binder对象,或者是它的特殊代理实现:
writeStrongBinder(IBinder)
writeStrongInterface(IBinder)
readStrongBinder()
(2)FileDescriptor。FileDescriptor是Linux中的文件描述符,可以通过Parcel的方法为:
writeFileDescriptor(FileDescriptor),readFileDescriptor()
因为传递后的对象仍然会基于和原对象相同的文件流进行操作,因而可以认为是Active Object的一种
Untyped Containers
它是用于读写标准的任意类型的java容器
writeArray(Object[ ])
readArray(ClassLoader)
writeList(List)
readList(List,ClassLoader)