Parcelable是Android提供的串行化接口,使用起来比Serializable更复杂,但效率高,常用于AIDL通信等。
一. Parcelable基本实现//parcelable接口publicclasspersonimplementsandroid.OS.parcelable { private intage; 私有字符串名称; @ overridepublicintdescribecontents () { return 0; } @ overridepublicvoidwritetoparcel (parcel dest,int flags ) )/dest.writeint ) this.age ); dest.writestring(this.name; } public Person () protected person (parcel in ) ) /按保存顺序this.age=in.readInt ); this.name=in.readString (; } publicstaticfinalcreatorpersoncreator=newcreatorperson () @ overridepublicpersoncreatefromparcel ((parcel source )/) @ }; }重要的是以下两种方法。
writeToParcel():将变量写入 Parcel,进行序列化
createFromParcel():从 Parcel 中创建序列化的对象
如果你觉得操作麻烦,还有一个简单的做法:
将名为Android Parcelable code generator的插件添加到Android Studio中。 打开这个类,使用Alt Insert,最后勾选Parcelbale就可以了。
二、enum实现可编程接口lcddwdm进行枚举,在尝试使用上述插件时,发现无法进行序列号。 这是因为Parcel.writeXXX中没有写入枚举方法,因此无法直接实现Parcelable。
此时,定义将枚举转换为Parcel可写类型的转换规则,支持从Parcel中获取变量以找到对应的枚举即可。
publicenumfruitimplementsparcelable {/* * *水果*/APPLE,BANANA,WATERMELON; @ overridepublicintdescribecontents () { return 0; } @ overridepublicvoidwritetoparcel (parcel dest,int flags )//枚举常量序号dest.writeint ) ordinal ); }通过publicstaticfinalcreatorfruitcreator=newcreatorfruit () ) overridepublicfruitcreatefromparcel /枚举常量序号找到} @ overrrided }; }