Android开发当中Parcelable接口的使用
本文转载于:http://www.2cto.com/kf/201205/132814.html
本文稍微做了些修改
对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java
 SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。
Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。
 Parcel用来完成数据的序列化传递。
Android的Intent中可以传递Parcelabel对象或集合,如下:
1. putExtra(name, Parcelable);
       2. putParcelableArrayListExtra(String name, ArrayList<? extends Parcelable> value);
下面就介绍一下实现Parcelable接口的方法。
通过实现Parcelable接口序列化对象的步骤:
1、实现Parcelable接口。
2、并且实现Parcelable接口的public
 void writeToParcel(Parcel dest, int flags)方法 。
    3、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法。
简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。
示例代码:
public class Person implements Parcelable {
    private String name;
    private Person(Parcel in) {
        name = in.readString();
    }
    @Override
    public int describeContents() {
    	//描述在这个Parcelable类中,包含特殊数量的Objects,如果没有直接返回0.
        return 0;
    }
    // 在该方法中把JavaBean写到Parcel
    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeString(name);  // 个人猜测,读取Parcel数据的次序要和这里的write方法的顺序一致,否则可能会读错数据。具体情况我没试验过!
    }
    public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
    	// 在该方法中从Parcel中恢复之前写入的JavaBean
    	@Override
        public Person createFromParcel(Parcel in) {
            return new Person(in);
        }
    	// 估计本方法是供外部类反序列化本类数组使用
    	@Override
        public Person[] newArray(int size) {
            return new Person[size];
        }
    };
}
很多的系统类实现了Parcelable接口,如下:

并且Intent本身也实现了Parcelable接口,因此在Android开发当中是非常推荐以Parcelable作为工具传递复制对象。
Android开发当中Parcelable接口的使用的更多相关文章
- Android开发中Parcelable接口的使用方法
		在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Par ... 
- Android开发当中的JavaBean实现
		一般我们在Android开发当中如果会对一些数据类进行解析,那么则需要写出一个JavaBean的类,比如在进行json解析的时候,就需要使用这个类进行数据的处理,下面是我们的JavaBean的模板代码 ... 
- 50、转自知乎上android开发相见恨晚的接口
		原文链接:http://www.zhihu.com/question/33636939 程序员软件开发Android 开发JavaAndroid修改 Android开发中,有哪些让你觉得相 ... 
- Android中的Parcelable接口和Serializable使用方法和差别
		Parcelable接口: Interface for classes whose instances can be written to and restored from a Parcel. Cl ... 
- Android开发---支付宝功能接口(支付功能)(转载!)
		最近在做一个关于购物商城的项目,项目里面付款这块我选的是调用支付宝的接口,因为用的人比较多. 在网上搜索了以下,有很多这方面的教程,但大部分教程过于陈旧,而且描述的过于简单.而且支付宝提供的接口一直在 ... 
- Android开发当中ListView的使用
		首先我们看ListView实现之后的的效果,如下图所示: 现在我们来看看如何来实现这个可以进行上下活动的ListView: 首先是主界面Activity_Main.xml的代码: <?xml v ... 
- Android开发之定义接口暴露数据
		写了一个网络请求的工具类,然后想要获取到网络请求的结果,在网络工具类中写了一个接口,暴露除了请求到的数据 代码: package com.lijingbo.knowweather.utils; imp ... 
- Android开发——进程间通信之Bundle和文件
		0. 前言 不论是Android还是其他操作系统,都会有自己的IPC机制,所谓IPC(Inter-Process Communication)即进程间通信.首先线程和进程是很不同的概念,线程是CPU ... 
- Android中Parcelable接口的使用
		在做开发的过程中,序列化是非常常见的.比如要将对象保存本地磁盘或者在网络上传输等.实现序列化有两种方式,一种是实现Serializable接口,第二种是实现Parcelable. Serializab ... 
随机推荐
- unity 调用 .dll 或 .so时遇到的问题
			1.32位的 .dll 无法在64位的unity编辑器下运行. System.DllNotFoundException: xxx , 64位的程序运行32位的dll是会报这种错 2.Failed t ... 
- 利用shell脚本添加环境变量
			在shell脚本设置了环境变量,如export LIBRARY_PATH=./lib/,执行了此脚本后, 在执行生成的可执行文件,提示错误 error while loading shared lib ... 
- C语言计算字符串数组中每个字符串出现的个数
			unsigned int str_num(char *str[], int num[], int len) { int i, j; int count; int flag[len]; ; i < ... 
- #error 、 #line 和 #pragma 的使用
			1. #error 的用法 (1)#error 是一种预编译器指示字,用于生成一个编译错误消息 (2)用法:#error message //注意:message 不需要用双引号包围 (3)#erro ... 
- ajax异步刷新
			前台js <script type="text/javascript"> function getLands() { $.ajax({ url:"httpse ... 
- mysql-基础和基本指令
			基础: 1.数据库模式:简单的说:就是一个数据库用户所拥有的数据库的对象. 比如scott用户建立了表,索引,视图,存储过程等对象,那么这些对象就构成了schema scott .有时用作数据 ... 
- hdoj--5567--sequence1(水题)
			sequence1 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total ... 
- 用jquery给select加选中事件
			select在前端开发过程中很常用,现在我们要实现一个效果,那就是选中select中的某一项,执行事件,本来自己没怎么接触过这些,最后网上找了一些资料,自己研究了一下,把方法分享给大家,大家如果有需要 ... 
- Linux-php安装mongodb
			Linux-php安装mongodb 标签(空格分隔): php 安装mongodb 1 下载解压 下载压缩包 :https://www.mongodb.com/download-center?jmp ... 
- Swift学习笔记(1):基础部分
			目录: 分号 常量和变量 数据类型 数值型类型转换 类型别名 元组 可选类型 API版本检查 分号 Swift并不强制要求你在每条语句的结尾处使用分号( ; ),你也可以按照自己的习惯添加分号.如果在 ... 
