Parcel 在英文中有两个意思,其一是名词,为包裹,小包的意思; 其二为动词,意为打包,扎包。邮寄快递中的包裹也用的是这个词。Android采用这个词来表示封装消息数据。这个是通过IBinder通信的消息的载体。需要明确的是Parcel用来存放数据的是内存(RAM),而不是永久性介质(Nand等)。

Parcelable,定义了将数据写入Parcel,和从Parcel中读出的接口。一个实体(用类来表示),如果需要封装到消息中去,就必须实现这一接口,实现了这一接口,该实体就成为“可打包的”了。

接口的定义如下:

[java] view
plain
copy

  1. public interface Parcelable {
  2. //内容描述接口,基本不用管
  3. public int describeContents();
  4. //写入接口函数,打包
  5. public void writeToParcel(Parcel dest, int flags);
  6. //读取接口,目的是要从Parcel中构造一个实现了Parcelable的类的实例处理。因为实现类在这里还是不可知的,所以需要用到模板的方式,继承类名通过模板参数传入。
  7. //为了能够实现模板参数的传入,这里定义Creator嵌入接口,内含两个接口函数分别返回单个和多个继承类实例。
  8. public interface Creator<T> {
  9. public T createFromParcel(Parcel source);
  10. public T[] newArray(int size);
  11. }

在实现Parcelable的实现中,规定了必须定义一个静态成员, 初始化为嵌入接口的实现类。

[java] view
plain
copy

  1. public static Parcel.Creator<DrievedClassName>  CREATOR =
  2. new Parcel.Creator<DrievedClassName>();

下面定义了一个简单类MyMessage, 他需要把自身的数据mdata,打入包中。 同时在消息的接收方需要通过MyMessage实现的Parcelable接口,将MyMessage重新构造出来。

[java] view
plain
copy

  1. import android.os.Parcel;
  2. import android.os.Parcelable;
  3. public class MyMessage implements Parcelable {
  4. private int mData;
  5. public int describeContents() {
  6. return 0;
  7. }
  8. public void writeToParcel(Parcel out, int flags) {
  9. out.writeInt(mData);
  10. }
  11. public static final Parcelable.Creator<MyMessage> CREATOR
  12. = new  Parcelable.Creator<MyMessage>(){
  13. public MyMessage createFromParcel(Parcel in) {
  14. return new MyMessage(in);
  15. }
  16. public MyMessage[] newArray(int size) {
  17. return new MyMessage[size];
  18. }
  19. };
  20. private MyMessage(Parcel in) {
  21. mData = in.readInt();
  22. }
  23. public MyMessage(int data) {
  24. // TODO Auto-generated constructor stub
  25. mData = data;
  26. }
  27. }

最新文章

  1. 如何将自己的windows设置为mysql服务器
  2. web页面全角&amp;半角
  3. oracle建表并设置ID为自动增长
  4. ASCII字符表
  5. UVa 400
  6. Native Application 开发详解(直接在程序中调用 ntdll.dll 中的 Native API,有内存小、速度快、安全、API丰富等8大优点)
  7. js 日期插件 datepicker
  8. 布局共享(列如所有activity拥有相同的布局部分,比如actionbar,在BaseActivity中写入布局)
  9. linux监控脚本,脚本支持传参,整合C程序
  10. CC++初学者编程教程(3) 安装VS2010 boost标准库开发环境
  11. 2016 Technology
  12. Cognos报表调度与作业管理
  13. HashMap原理浅析
  14. SharpZipLib压缩解压的使用
  15. 【Linux】排序命令sort
  16. luogu1514 [NOIp2010]引水入城 (bfs+记忆化搜索)
  17. JavaEE - 20181225
  18. 网上搜到的权限系统demo
  19. 洛谷P4147 玉蟾宫(动规:最大子矩形问题/悬线法)
  20. Swagger2的使用及注意事项

热门文章

  1. hdu 4283 区间dp
  2. bzoj4152[AMPPZ2014]The Captain 最短路
  3. bzoj3831 [Poi2014]Little Bird 单调队列优化dp
  4. C语言预备作业
  5. c# error
  6. ignorable tips
  7. struts2 可以用ognl拿到值而不可以用el拿到值的解决方法
  8. redis锁处理并发问题
  9. ionic笔记
  10. ubuntu + 远程桌面连接命令 + rdesktop + 连接windows或者ubuntu远程桌面