美文网首页
Parcelable、Serialable

Parcelable、Serialable

作者: 灰色轨迹_e2d8 | 来源:发表于2019-03-11 10:14 被阅读0次

都是序列化接口
Parcelable在android.os包中
Serializable在java.io包中

import android.os.Parcelable;
import java.io.Serializable;

区别

代码使用方式

实现Parcelable接口需要自己定义写入Parcel和从Pacel读取数据的方式。

    public static final Creator<Standard> CREATOR = new Creator<Standard>() {
        @Override
        public Standard createFromParcel(Parcel source) {
            return new Standard(source);
        }

        @Override
        public Standard[] newArray(int size) {
            return new Standard[size];
        }
    };

    @Override
    public int describeContents() {
        return 0;
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(type);
        dest.writeInt(score);
        dest.writeString(id);
        dest.writeString(name);
        dest.writeString(desc);
        dest.writeString(tip);
    }

    public Standard(Parcel source){
        this.type = source.readInt();
        this.score = source.readInt();
        this.id = source.readString();
        this.name = source.readString();
        this.desc = source.readString();
        this.tip = source.readString();
    }

Android Studio可以安装插件Android Parcalable code generator


image.png

在使用到的类中用快捷键 Alt+insert即可


image.png

实现Serializable,其序列化过程都交给底层实现,只需提供一个序列化版本号即可。
id(serialVersionUID)

特点

Parcelable的性能比Serializable好,在内存开销方面较小,所以在内存间数据传输时推荐使用Parcelable,如activity间传输数据,而Serializable可将数据持久化方便保存,所以在需要保存或网络传输数据时选择Serializable,因为android不同版本Parcelable可能不同,所以不推荐使用Parcelable进行数据持久化

读写

Serializable使用I/O读写
Parcelable使用内存读写

其他

Activity之间传递数据时,因为Bundle使用的是Binder机制经行数据传输。能使用的 Binder 的缓冲区是有大小限制的(有些手机是 2 M),而一个进程默认有 16 个 Binder 线程,所以一个线程能占用的缓冲区就更小了( 有人以前做过测试,大约一个线程可以占用 128 KB)。所以可能出现The Binder transaction failed because it was too large 这类 TransactionTooLargeException 异常。

相关文章

网友评论

      本文标题:Parcelable、Serialable

      本文链接:https://www.haomeiwen.com/subject/oxhvpqtx.html