关于android:安卓中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<User> CREATOR = new Parcelable.Creator<User>() {
    @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 接口,并实现读写的形象办法。

相干视频举荐:
【安卓面试必看】Serializable原理以及面试点详解

本文转自 https://juejin.cn/post/6844903864756338701,如有侵权,请分割删除。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理