Android开发之Parcel机制实例分析
本文实例讲述了Android开发之Parcel机制。分享给大家供大家参考。具体分析如下:
在java中,有序列化机制。但是在安卓设备上,由于内存有限,所以设计了新的序列化机制。
Containerforamessage(dataandobjectreferences)thatcanbesentthroughanIBinder. AParcelcancontainbothflatteneddatathatwillbeunflattenedontheothersideoftheIPC(usingthevariousmethodshereforwritingspecifictypes,orthegeneralParcelableinterface),andreferencestoliveIBinderobjectsthatwillresultintheothersidereceivingaproxyIBinderconnectedwiththeoriginalIBinderintheParcel.
Parcelisnotageneral-purposeserializationmechanism. Thisclass(andthecorrespondingParcelableAPIforplacingarbitraryobjectsintoaParcel)isdesignedasahigh-performanceIPCtransport. Assuch,itisnotappropriatetoplaceanyParceldataintopersistentstorage:changesintheunderlyingimplementationofanyofthedataintheParcelcanrenderolderdataunreadable.
从上面的官方解释可以看到,Parcel主要就是用来序列化,在一端编码,在另外一端进行解码。
本质上把它当成一个Serialize就可以了,只是它是在内存中完成的序列化和反序列化,利用的是连续的内存空间,因此会更加高效。
我们接下来要说的是Parcel类如何应用。就应用程序而言,最常见使用Parcel类的场景就是在Activity间传递数据。没错,在Activity间使用Intent传递数据的时候,可以通过Parcelable机制传递复杂的对象。
具体例子可以参见这里,写的很好。
在实现Parcelable接口的时候,必须实现其中的两个方法并且定义一个CREATOR:
@Override publicintdescribeContents(){ return0; } @Override publicvoidwriteToParcel(Parceldest,intflags){ dest.writeInt(color); }
其中,writeToParcel方法定义了怎么向序列化中写入该类对象的信息。
CREATOR对象中定义了两个函数:
publicMyColorcreateFromParcel(Parcelin){ returnnewMyColor(in); } publicMyColor[]newArray(intsize){ returnnewMyColor[size]; }
其中,createFromParcel方法告诉平台如何从已经序列化的对象中构建该类的实例。newArray方法的作用不明。实现于Parcelable接口的CREATOR成员的createFromParcel方法用于告诉平台如何从包裹里创建该类的实例,而writeToParcel方法则用于告诉平台如何将该类的实例存储到包裹中。通过这种约定,平台就知道怎么序列化和反序列化了。
希望本文所述对大家的Android程序设计有所帮助。