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

 

 

 

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