Android 使用Parcelable传递对象

来源:互联网 发布:荼靡 知乎 编辑:程序博客网 时间:2024/06/05 05:25

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;    }}

主要要实现:

  1. describeContents() 方法:直接返回0就可以了
  2. writeToParcel() 方法:需要用 dest.writeXXX() 方法写类中的每一个属性,当然 writeXXX 要符合属性的类型。基本类型大家都知道,如果要写入的属性同样是一个自定义对象,则该对象也必须继承 Parcelizable接口。
  3. 静态 Creator 对象:需要实现2个方法,createFromParcel() 和 newArray() 方法。
    createFromParcel() 方法需要自己创建一个自身实例对象,然后用Parcel的readXXX() 方法再读取到实例中,然后返回实例。newArray() 方法是在初始化一个Parcelizable列表时使用。

大家看代码自己体会一下吧!

0 0