在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Parcelable接口,通过具体试验,和大家分享一下Parcelable接口的用法,希望对大家有帮助。

Serializable接口与Parcelable接口的区别

在将Parcelable接口的使用前,我们先来看看Serializable接口和Parcelable接口有什么区别:

1、Serializable是JDK提供的接口,而Parcelable是Android SDK提供的。

2、Serializable序列化是基于磁盘的,而Parcelable是基于内存的。在内存中读写的效率要高于磁盘,所以Android中跨进程传递对象都是使用Parcelable。

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);

}

从parcelable接口定义中,我们可以看出,实现parcelable接口,我们需要实现下面几个方法:

1.describeContents方法。内容接口描述,默认返回0就可以;

2.writeToParcel 方法。该方法将类的数据写入外部提供的Parcel中。即打包需要传递的数据到Parcel容器保存,以便从parcel容器获取数据,该方法声明如下:

writeToParcel (Parcel dest, int flags) 具体参数含义见javadoc

3、静态的Parcelable.Creator接口,本接口有两个方法:

createFromParcel(Parcel in)  从Parcel容器中读取传递数据值,封装成Parcelable对象返回逻辑层。

newArray(int size) 创建一个类型为T,长度为size的数组,仅一句话(return new T[size])即可。方法是供外部类反序列化本类数组使用。

Parcelable接口的使用

public class AppContent implements Serializable, Parcelable {

//应用名字

private String name;

//应用下载链接

private String url;

private int downloadPercent = 0;

private Status status = Status.PENDING;

public AppContent(String name, String url) {

this.name = name;

this.url = url;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getUrl() {

return url;

}

public void setUrl(String url) {

this.url = url;

}

public int getDownloadPercent() {

return downloadPercent;

}

public void setDownloadPercent(int downloadPercent) {

this.downloadPercent = downloadPercent;

}

public Status getStatus() {

return status;

}

public void setStatus(Status status) {

this.status = status;

}

@Override

public String toString() {

return name;

}

@Override

public int describeContents() {

return 0;

}

//实现Parcel接口必须覆盖实现的方法

@Override

public void writeToParcel(Parcel dest, int flags) {

/*将AppContent的成员写入Parcel,

* 注:Parcel中的数据是按顺序写入和读取的,即先被写入的就会先被读取出来

*/

dest.writeString(name);

dest.writeString(url);

dest.writeInt(downloadPercent);

dest.writeValue(status);

}

//该静态域是必须要有的,而且名字必须是CREATOR,否则会出错

public static final Parcelable.Creator<AppContent> CREATOR =

new Parcelable.Creator<AppContent>() {

@Override

public AppContent createFromParcel(Parcel source) {

//从Parcel读取通过writeToParcel方法写入的AppContent的相关成员信息

String name = source.readString();

String url = source.readString();

int downloadPercent = source.readInt();

Status status = (Status)source.readValue(new ClassLoader(){});

AppContent appContent = new AppContent(name, url);

appContent.setDownloadPercent(downloadPercent);

appContent.setStatus(status);

//更加读取到的信息,创建返回Person对象

return appContent;

}

@Override

public AppContent[] newArray(int size)

{

// TODO Auto-generated method stub

//返回AppContent对象数组

return new AppContent[size];

}

};

}

通过Intent进行传递:

1    Intent intent = new Intent(Constants.DOWNLOAD_MSG);

2    Bundle bundle = new Bundle();

3    bundle.putParcelable("appContent", appContent);

4    intent.putExtras(bundle);

以上就是Android开发中,序列化常用的Parcelable接口方法,遇到有类似问题的亲可尝试使用上述的方法进行解决。

Android开发中Parcelable接口的使用方法的更多相关文章

  1. Android开发当中Parcelable接口的使用

    本文转载于:http://www.2cto.com/kf/201205/132814.html 本文稍微做了些修改 android提供了一种新的类型:Parcel.本类被用作封装数据的容器,封装后的数 ...

  2. 【转】Android开发中让你省时省力的方法、类、接口

    转载 http://www.toutiao.com/i6362292864885457410/?tt_from=mobile_qq&utm_campaign=client_share& ...

  3. Android开发中使用startActivityForResult()方法从Activity A跳转Activity B出现B退出时A也同时退出的解决办法

    最近一个 App 中用到了 startActivityForResult() 方法,使用的时候却出现了一些问题,比如我在 Activity A 中调用该方法向 Activity B 中跳转,如果 B  ...

  4. Android开发中,那些让您觉得相见恨晚的方法、类或接口

    Android开发中,那些让你觉得相见恨晚的方法.类或接口本篇文章内容提取自知乎Android开发中,有哪些让你觉得相见恨晚的方法.类或接口?,其实有一部是JAVA的,但是在android开发中也算常 ...

  5. 在Android开发中,定时器一般有以下3种实现方法

    在Android开发中,定时器一般有以下3种实现方法: 原文地址http://www.360doc.com/content/12/0619/13/87000_219180978.shtml 一.采用H ...

  6. 在Android开发中,定时执行任务的3种实现方法

    在Android开发中,定时执行任务的3种实现方法: 一.采用Handler与线程的sleep(long)方法(不建议使用,Java的实现方式)二.采用Handler的postDelayed(Runn ...

  7. 在android开发中使用multdex的方法-IT蓝豹为你整理

    Android系统在安装应用时,往往需要优化Dex,而由于处理工具DexOpt对id数目的限制,导致其处理的数目不能超过65536个,因此在Android开发中,需要使用到MultiDex来解决这个问 ...

  8. android开发中关于继承activity类中方法的调用

    android开发中关于继承activity类中的函数,不能在其他类中调用其方法. MainActivity.java package com.example.testmain; import and ...

  9. 在Android开发中替换资源图片不起作用的解决方法

    现象 在android开发中,经常会需要替换res\drawable中的图片,打开res\layout下的文件预览布局页面发现图片已经被替换,但在模拟器或者真实机器上运行时发现该图片并没有被替换,还是 ...

随机推荐

  1. django+xadmin在线教育平台(八)

    4-5 user modesl.py设计 循环引用: 设计app时每个app都有model   mark 如图:我们在user中定义usercourse记录用户学习的课程.会有两个外键:user和co ...

  2. 使用ansible安装配置zabbix客户端

    ansible角色简介: 目录名 说明 defaults 默认变量存放目录 handlers 处理程序(当发生改变时需要执行的操作) meta 角色依赖关系处理 tasks 具体执行的任务操作定义 t ...

  3. linux:eth网卡对应的物理网口判断

    可以利用ethtool命令 #ethtool -p eth0 执行上述命令则相应的物理网口会闪烁,则可以判断对应的物理网口 注:应在不插网线的情况下测试

  4. 死锁-Java代码示例

    class MyThread implements Runnable{ private Object o1 = new Object(); private Object o2 = new Object ...

  5. 【Effective c++ 读书笔记】条款01 视 C++ 为一个语言联邦

    一开始,C++只是 C 加上一些面向对象的特性.C++最初的名称 C with Classes 也反映了这个血缘关系. 但是,现在,当这个语言逐渐成熟,它变得更活跃更无拘束,更大胆冒险,开始接受不同于 ...

  6. Python容器--list, tuple, dict, set

    ## Python 中有四种用于存放数据的序列--list, tuple, dict, set ## list 列表 - 可以存放任意类型数据的有序序列 - 列表可以由零个或多个元素组成,元素之间用逗 ...

  7. php-5.6.26源代码 - opcode处理器,“乘法opcode”处理器

    // opcode处理器 - 运算符怎么执行: “*” 乘法opcode处理器 static int ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(Z ...

  8. java中的运算(2013-05-03-bd 写的日志迁移

    // ++自加 --自减 int a=9; a++; // a=a+1; System.out.println(a); // a=10 a--; // a=a-1 System.out.println ...

  9. .c和.h区别

    本质没有区别: .h是头文件 一般情况下下边内容放在.h文件中 宏定义 结构体,联合,枚举声明 typedef声明 外部函数声明 全局变量声明 .c是程序文件 一般情况下下边内容放在.h文件中 内含函 ...

  10. 最短路径之迪杰斯特拉算法(Java)

    1)Dijkstra算法适用于求图中两节点之间最短路径 2)Dijkstra算法设计比较巧妙的是:在求源节点到终结点自底向上的过程中,源节点到某一节点之间最短路径的确定上(这也是我之前苦于没有解决的地 ...