Android序列化Parcelable
16lz
2021-01-23
Android在各个Activity之间传递List<MealItem>时,需要将MealItem序列化;
而在Android中序列化有两种方式:实现Serializable接口或者实现Parcelable接口,两者可以实现同样的目的,后者效率高但实现不如Serializable方便;
在Android中推荐后者
1. 实现Serializable接口
Serializable是JavaSE中自带的接口,实现起来很简单,只需要在实例类中implementsSerializable即可
<span style="font-size:14px;">public class MealItem implements Serializable{private String name;//菜品名称private String price;//菜品现价private int count;//预订数量public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}}</span>
Parcelable是Android中特有的接口,其效率高,因此在Android中被推荐
实现此接口需要实现两个方法以及一个CREATOR:
public int describeContents();
public void writeToParcel(Parcel dest, int flags);
public static final Parcelable.Creator<MealItem> CREATOR = new Creator<MealItem>() {
@Override
public MealItem createFromParcel(Parcel source);
@Override
public MealItem[] newArray(int size);
};
writeToParcel的顺序应该与CREATOR的createFromParcel保持一致
例子如下:可对比实现Serializable时的代码;
<span style="font-size:18px;">public class MealItem implements Parcelable {private String name;//菜品名称private String price;//菜品现价private int count;//预订数量public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPrice() {return price;}public void setPrice(String price) {this.price = price;}public int getCount() {return count;}public void setCount(int count) {this.count = count;}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeString(name);dest.writeString(price);dest.writeInt(count);}public static final Parcelable.Creator<MealItem> CREATOR = new Creator<MealItem>() {@Overridepublic MealItem createFromParcel(Parcel source) {MealItem mealItem = new MealItem();mealItem.setName(source.readString());mealItem.setPrice(source.readString());mealItem.setCount(source.readInt());return null;}@Overridepublic MealItem[] newArray(int size) {return new MealItem[size];}};}</span>
更多相关文章
- [置顶] Android高质量博客分类汇总及接口API
- Android: AIDL --- Android中的远程接口
- Android Camera的接口与架构介绍
- Android 设置默认锁屏壁纸接口
- (android 实战总结)android对html支持接口总结
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第五
- Android 无线接口层RIL
- android对html支持接口总结
- Android 匿名共享内存Java接口分析