-
Parcelable
2020-08-12 11:43:46在代码中implements Parcelable的作用是什么呢?? Android开发,无法将对象的引用传递给Activity或Fragment,需要将对象放到Intent或者Bundle里,然后再传递。即,将对象转换为可传输的二进制流的过程从而进行传输...在代码中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从流里读取对象,这个过程需要我们自己来实现,且写的顺序和读的顺序必须一致。
收藏数
5,350
精华内容
2,140