Android学习—实体类实现parcelable序列化

笔者在进行页面跳转时,要传递一个实体类,但是这个实体类有一个bitmap属性,在传递这个对象时报错,查询资料之后发现需要对实体类进行序列化。实现序列化有以下两种方法:

 

  • 第一个是使用Serializable接口,这个接口是Java SE本身就支持的序列化接口,但是使用这个接口来进行Intent数据的传递有一个缺点。因为这个序列化和反序列化过程中需要大量I/O操作,从而导致开销大效率低。
  • 第二个是使用Parcelable接口的使用,也就是本篇文章的主要重点。这种方式是Android中支持的序列化方式,使用起来稍微麻烦点,但是效率更高,所以我们一般使用这个方式来通过Intent传递数据。

 

第一种方式只需要在类后面加上implements Serializable即可,但是笔者在实现过程中发现只能解决一小部分问题,还是第二种方法更好实现。
这里的各种类型比较全,可以做相对参考。下面贴上代码:

 

 

public class Worker implements Parcelable {  
  
    public String name;  
    public int age;  
    public Programmer programmer;  
    public ArrayList<Programmer> pros = new ArrayList<Programmer>();  
    public Bitmap icon;  
    public Designer designer;  
      
    public Worker() {}  
      
    public int describeContents() {  
        return 0;  
    }  
  
    public void writeToParcel(Parcel out, int flags) {  
        out.writeString(name);  
        out.writeInt(age);  
        out.writeParcelable(programmer, flags);  
        out.writeList(pros);  
        out.writeParcelable(icon, flags);  
        out.writeSerializable(designer);  
    }  
  
    public static final Parcelable.Creator<Worker> CREATOR  
            = new Parcelable.Creator<Worker>() {  
        public Worker createFromParcel(Parcel in) {  
            return new Worker(in);  
        }  
  
        public Worker[] newArray(int size) {  
            return new Worker[size];  
        }  
    };  
      
    private Worker(Parcel in) {  
        name = in.readString();  
        age = in.readInt();  
        programmer = in.readParcelable(Programmer.class.getClassLoader()); // 这个地方的ClassLoader不能为null  
        pros = in.readArrayList(Programmer.class.getClassLoader()); // 这个地方的ClassLoader不能为null  
        icon = in.readParcelable(null); // 这个地方可以为null  
        designer = (Designer) in.readSerializable();  
    } 
}  

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章