Android 使用Parcelable传递对象
16lz
2021-01-23
Parcelable接口
Parcelable接口用来将一个类变成可序列化对象。大家都知道,java中还提供了一种方法使对象可序列化,就是Serializable接口。两者的区别在于:Serializable接口是为要存储在数据库,用于网络传输,保存类属性到本地的类设计的。但是Serializable在android中使用效率较低。所以Android中出现了Parcelizable接口来代替Serializable接口,Parclizable接口可实现对象在进程间,组件间高效的传递。
使用方法
使用Parcelizable比Serializable实现更多的方法。想贴一个完整代码:
public class CookInfo implements Parcelable { private String title; private String description; private String season; private Bitmap picture; @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel dest, int flags) { dest.writeString(title); dest.writeString(description); dest.writeString(season); dest.writeParcelable(picture, flags); } public static final Creator<CookInfo> CREATOR = new Creator<CookInfo>() { @Override public CookInfo createFromParcel(Parcel in) { CookInfo ci = new CookInfo(); ci.title = in.readString(); ci.description = in.readString(); ci.season = in.readString(); ci.picture = in.readParcelable(Bitmap.class.getClassLoader()); return ci; } @Override public CookInfo[] newArray(int size) { return new CookInfo[size]; } }; public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public String getSeason() { return season; } public void setSeason(String season) { this.season = season; } public Bitmap getPicture() { return picture; } public void setPicture(Bitmap picture) { this.picture = picture; }}
主要要实现:
- describeContents() 方法:直接返回0就可以了
- writeToParcel() 方法:需要用 dest.writeXXX() 方法写类中的每一个属性,当然 writeXXX 要符合属性的类型。基本类型大家都知道,如果要写入的属性同样是一个自定义对象,则该对象也必须继承 Parcelizable接口。
- 静态 Creator 对象:需要实现2个方法,createFromParcel() 和 newArray() 方法。
createFromParcel() 方法需要自己创建一个自身实例对象,然后用Parcel的readXXX() 方法再读取到实例中,然后返回实例。newArray() 方法是在初始化一个Parcelizable列表时使用。
大家看代码自己体会一下吧!
更多相关文章
- Android解决输入法自动弹出方法大全
- Android PinyinIME 源码笔记 -- 1. 底层服务接口简介
- Android 从硬件到应用:一步一步向上爬 4 -- 使用 JNI 方法调硬件
- Android高手进阶教程(十一)之----Android 通用获取Ip的方法(判断
- 通过对inflate与 findViewById 方法的探究深度了解一下Android
- Android 屏幕旋转生命周期以及处理方法