天天看點

安卓中Serializable 比 Parcelable好在哪?

一、序列化的目的:

(1)永久的儲存對象,将對象資料儲存在檔案、磁盤或者資料庫中 。

(2)通過序列化操作将對象資料在網絡上進行傳輸 。

(3)将對象序列化之後在程序間進行傳輸。

(3)在安卓中使用 Intent 進行傳輸時候,資料類型較為複雜的需要進行序列化操作 。

二、兩者差別:

(1). 在使用記憶體的時候,Parcelable 類比 Serializable 性能高,是以推薦使用 Parcelable 類。

(2). Serializable 在序列化的時候會産生大量的臨時變量,進而引起頻繁的 GC。

(3). arcelable 不能使用在要将資料存儲在磁盤上的情況。盡管 Serializable 效率低點,但在這種情況下,還是建 議你用 Serializable.

(4). Serializable的實作,隻需要實作Serializable接口即可。這隻是給對象打了一個标記(UID),系統會自動将其序列化。而Parcelabel的實作,不僅需要實作Parcelabel接口,還需要在類中添加一個靜态成員變量CREATOR,這個變量需要實作 Parcelable.Creator 接口,并實作讀寫的抽象方法。

Serializable 用法

public class User implements Serializable {

private String name;

private String age;



public User(String name, String age) {

    this.name = name;

    this.age = age;

}



public String getName() {

    return name;

}



public void setName(String name) {

    this.name = name;

}



public String getAge() {

    return age;

}



public void setAge(String age) {

    this.age = age;

}



@Override

public String toString() {

    return "User{" +

            "name='" + name + '\'' +

            ", age='" + age + '\'' +

            '}';

}      

}

通過上述代碼中,可知Serializable序列化 之需要實作Serializable接口即可,使用比較簡單;

Parcelable 用法

public class User implements Parcelable {

public int id;



public String age;



public String name;



@Override

public int describeContents() {

    return 0;

}



@Override

public void writeToParcel(Parcel dest, int flags) {

    dest.writeInt(this.id);

    dest.writeString(this.age);

    dest.writeString(this.name);

}



public User() {

}



protected User(Parcel in) {

    this.id = in.readInt();

    this.age = in.readInt();

    this.name = in.readString();

}



public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {

    @Override

    public User createFromParcel(Parcel source) {

        return new User(source);

    }



    @Override

    public User[] newArray(int size) {

        return new User[size];

    }

};      

通過代碼可看Parcelabel的實作,不僅需要實作Parcelabel接口,還需要在類中添加一個靜态成員變量CREATOR,這個變量需要實作 Parcelable.Creator 接口,并實作讀寫的抽象方法。

相關視訊推薦: