Parcelable

在代码中implements Parcelable的作用是什么呢??

参考:https://blog.csdn.net/javazejian/article/details/52665164?utm_medium=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.channel_param&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-OPENSEARCH-1.channel_param

Parcelable是Android为我们提供的序列化的接口,Parcelable相对于Serializable的使用较为复杂一些,但是Parcelable的效率也相对较高。对比Parcelable vs Serializable

Android源码中的Parcelable

/**
     * Interface for classes whose instances can be written to
   * and restored from a {@link Parcel}.  Classes implementing the Parcelable
 * interface must also have a non-null static field called <code>CREATOR</code>
 * of a type that implements the {@link Parcelable.Creator} interface.
 * 
 * <p>A typical implementation of Parcelable is:</p>
 * 
 * <pre></pre>
 * */
 * public class MyParcelable implements Parcelable {
 *     private int mData;
 *
 *	  //-----当前对象的内容描述,一般返回0即可-----
 *       public int describeContents() {
 *         return 0;
 *     }
 *	 //-----将当前对象写入序列化结构中-----
 *     public void writeToParcel(Parcel out, int flags) {
 *         out.writeInt(mData);
 *     }
 *	 //-----public static final一个都不能少,内部对象CREATOR的名称也	不能改变,必须全部大写。-----
 *     public static final Parcelable.Creator<MyParcelable> CREATOR
 *             = new Parcelable.Creator<MyParcelable>() {
 * 
 * 		  //实现从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层..从序列化后的对象中创建原始对象
 *         public MyParcelable createFromParcel(Parcel in) {
 *             return new MyParcelable(in);
 *         }
 *
 *		  //创建一个类型为T,长度为size的数组,供外部类反序列化本类数组使用
 *         public MyParcelable[] newArray(int size) {
 *             return new MyParcelable[size];
 *         }
 *     };
 *     
 *     private MyParcelable(Parcel in) {
 *         mData = in.readInt();
 *     }
 * }

从代码可知,在序列化的过程中需要实现的功能有 序列化反序列 以及 内容描述

  • writeToParcel 方法实现序列化功能,其内部是通过Parcel的一系列write方法来完成的
  • CREATOR内部对象来实现反序列化,其内部是通过createFromParcel方法来创建序列化对象并通过newArray方法创建数组,最终利用Parcel的一系列read方法完成反序列化
  • 最后由describeContents完成内容描述功能,改方法一般返回0,仅当对象中存在文件描述符时返回1.

可以将Parcel看作是类似于Serlizable的读写流,通过writeToParcel把对象写到流里面,再通过createFromParcel从流里读取对象,这个过程需要我们自己来实现,且写的顺序和读的顺序必须一致。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值