三分钟弄懂Android&Parcelable&

作者: _ming_ming | 来源:发表于2016-07-30 19:53 被阅读629次

    为什么要序列化

    • 1.实现Parcelable就是为了进行序列化,那么,为什么要序列化?
      1)永久性保存对象,保存对象的字节序列到本地文件中;
      2)通过序列化对象在网络中传递对象;
      3)通过序列化在进程间传递对象。

    • 2.实现序列化的方法
      Android中实现序列化有两个选择:一是实现Serializable接口(是JavaSE本身就支持的),一是实现Parcelable接口(是Android特有功能,效率比实现Serializable接口高效,可用于Intent数据传递,也可以用于进程间通信(IPC))。实现Serializable接口非常简单,声明一下就可以了。
      ** 实现Parcelable接口稍微复杂一些,但效率更高。(推荐这种)**

    • 3.Parcelable接口定义

    public interface Parcelable { 
    //内容描述接口,基本不用管 
    public int describeContents(); 
    //写入接口函数,打包 
    public void writeToParcel(Parcel dest, int flags); 
    //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。
    //因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。
    //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例 。
    public interface Creator<T> { 
    public T createFromParcel(Parcel source); 
    public T[] newArray(int size); }
    }
    
    • 4.实现Parcelable步骤
      1)implements Parcelable
      2)重写writeToParcel方法,将你的对象序列化为一个Parcel对象,即:将类的数据写入外部提供的Parcel中,打包需要传递的数据到Parcel容器保存,以便从 Parcel容器获取数据
      3)重写describeContents方法,内容接口描述,默认返回0就可以
      4)实例化静态内部对象CREATOR实现接口Parcelable.Creator

    总结:

    通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。

    示例代码如下

    public class MyParcelable implements Parcelable{
     private int mData;
     public int describeContents(){
     return 0;} 
    public void writeToParcel(Parcel out, int flags){ 
    out.writeInt(mData); } 
    public static final Parcelable.Creator <MyParcelable> CREATOR = new Parcelable.Creator<MyParcelable>(){ 
    public MyParcelable createFromParcel(Parcel in){
     return new MyParcelable(in); 
    } 
    public MyParcelable[] newArray(int size){ 
    return new MyParcelable[size]; 
        }
     }; 
    private MyParcelable(Parcel in){
     mData = in.readInt(); } 
    }
    

    End

    相关文章

      网友评论

        本文标题:三分钟弄懂Android&Parcelable&

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