您的位置:首页 > 其它

进程间数据传递载体——Parcel(二)

2015-12-03 13:52 253 查看
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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: