from:

http://www.cnblogs.com/renqingping/archive/2012/10/25/Parcelable.html

Interface for classes whose instances can be written to and restored from a Parcel。 Classes implementing the Parcelable interface must also have a static field called CREATOR, which is an object implementing the Parcelable.Creator interface。

 public interface Parcelable {
public static final int PARCELABLE_WRITE_RETURN_VALUE = 0x0001;
public static final int CONTENTS_FILE_DESCRIPTOR = 0x0001;
public int describeContents();//返回0即可
    //一个是把本对象(实现了Parcelable的对象)的数据写入Parcel中
public void writeToParcel(Parcel dest, int flags);
  /**
* Interface that must be implemented and provided as a public CREATOR
* field that generates instances of your Parcelable class from a Parcel.
*/
public interface Creator<T> {//提供一个内部类,供反序列化的时候把Parcel对象转化为对象,即本对象
/**
* Create a new instance of the Parcelable class, instantiating it
* from the given Parcel whose data had previously been written by
* {@link Parcelable#writeToParcel Parcelable.writeToParcel()}.
*
* @param source The Parcel to read the object's data from.
* @return Returns a new instance of the Parcelable class.
*/
public T createFromParcel(Parcel source);//读出source中的数据给T(即本对象) /**
* Create a new array of the Parcelable class.
*
* @param size Size of the array.
* @return Returns an array of the Parcelable class, with every entry
* initialized to null.
*/
public T[] newArray(int size);
}
public interface ClassLoaderCreator<T> extends Creator<T> {
public T createFromParcel(Parcel source, ClassLoader loader);
}
}

2.序列化的原因

1)永久性保存对象,保存对象的字节序列到本地文件中;

2)通过序列化对象在网络中传递对象;

3)通过序列化在进程间传递对象。

3.Parcelable与Serializable的对比

  • Parcelable

  1.android特有;

  2.实现复杂;

  3.比Serializable高效

  4.可以用于进程间通信(IPC),也可用于intent通讯;

  5.不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下。

  6.复杂类型必须实现Parcelable接口。

  • Serializable

  1.java SE实现;

  2.在序列化的时候会产生大量的临时变量,从而引起频繁的GC。

  3.实现简单

Parcel是公共的内存空间,所以可以存、取数据。由于是内存操作,所以要比Serialize利用外部存储设备来存、取数据要快!

如果要发送对象最简单的方法是: 把要发的数据直接当做对象发送,接收也不用Bundle(这是可以的),因为已经默认创建。

4.public static final一个都不能少,内部对象CREATOR的名称也不能改变,必须全部大写。

简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。

5.简单例子

 public class Person implements Parcelable {
private String name;
private int age;
private static final String TAG = "Person"; public String getName() {
return name;
} public void setName(final String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(final int age) {
this.age = age;
} public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {
@Override
public Person createFromParcel(final Parcel source) {
Log.d(TAG, "createFromParcel");
Person mPerson = new Person();
mPerson.name = source.readString();
mPerson.age = source.readInt();
return mPerson;
} @Override
public Person[] newArray(final int size) {
// TODO Auto-generated method stub
return new Person[size];
}
}; @Override
public int describeContents() {
// TODO Auto-generated method stub
Log.d(TAG, "describeContents");
return 0;
} @Override
public void writeToParcel(final Parcel dest, final int flags) {
// TODO Auto-generated method stub
Log.d(TAG, "writeToParcel");
dest.writeString(name);
dest.writeInt(age);
}
}

6.writeToParcel()写和createFromParcel()读对象的数据们的顺序必须一致;



Android中Parcelable接口用法的更多相关文章

  1. (转)Android中Parcelable接口用法

    1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...

  2. Android中Parcelable接口的使用

    在做开发的过程中,序列化是非常常见的.比如要将对象保存本地磁盘或者在网络上传输等.实现序列化有两种方式,一种是实现Serializable接口,第二种是实现Parcelable. Serializab ...

  3. Android中Parcelable接口

    1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...

  4. Android中Parcelable与Serializable接口用法

    转自: Android中Parcelable接口用法 1. Parcelable接口 Interface for classes whose instances can be written to a ...

  5. Android中的接口回调技术

    Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James ...

  6. Android中回调接口的使用

    MainActivity如下: package cn.testcallback; import android.os.Bundle; import android.app.Activity; /** ...

  7. android 中uri.parse()用法

    android 中uri.parse()用法 1,调web浏览器 Uri myBlogUri = Uri.parse("http://xxxxx.com"); returnIt = ...

  8. Android中Parcelable和Serializable接口用法

    1. Parcelable接口 Interface for classes whose instances can be written to and restored from a Parcel. ...

  9. Android开发中Parcelable接口的使用方法

    在网上看到很多Android初入门的童鞋都在问Parcelable接口的使用方法,小编参考了相关Android教程,看到里面介绍的序列化方法主要有两种分别是实现Serializable接口和实现Par ...

随机推荐

  1. 在字符界面tty1~tty6中使用鼠标,并用其复制粘贴

    1. 安装 无意间看到gpm这个服务可以让你在tty1~tty6 环境中使用鼠标. 先用 rpm -qa gpm 查看是否已经安装此服务,如果提示以安装,则可以直接开启: 否则就要通过 yum ins ...

  2. Sharepoint超期触发列表工作流提醒

    项目背景 Sharepoint 2010 ,Infopath 2010环境,用Infopath设置好表单把数据提交到Sharepoint的Library库.很常见的需求,其中有一个[状态]字段,[申请 ...

  3. iOS Xcode behaviors个人常用Debug配置

  4. 使用Soapui测试webservice接口

    本来想自己写一个的,但下面这个资料比较详细(截图和步骤细节),就省事了,具体内容见: http://blog.csdn.net/oracle_microsoft/article/details/568 ...

  5. WPF:依赖属性的数据绑定

    One of the strengths of WPF is its data binding capabilities. Although data binding is not new (in f ...

  6. Poj1611The Suspects

    A - The Suspects Time Limit: 1000 MS Memory Limit: 20000 KB 64-bit integer IO format: %I64d , %I64u  ...

  7. Prerequisites?[HDU1144]

    Prerequisites?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...

  8. 20145308刘昊阳 《Java程序设计》第4周学习总结

    20145308刘昊阳 <Java程序设计>第4周学习总结 教材学习内容总结 第六章 继承与多态 6.1 何谓继承 继承:面向对象中,为避免多个类间重复定义共同行为使用 把相同代码提升为父 ...

  9. Android MuPDF 阅读PDF文件

    MuPDF是一款轻量级的开源软件,可以用来阅读PDF文件.下载完源代码以后,想要运行成功,除了Android SDK之外,还需要Android NDK环境,因此有点麻烦. 但是一旦安装完必须的环境以后 ...

  10. ACM 精挑细选

    精 挑 细 选 时间限制:3000 ms  |  内存限制:65535 KB 难度:1   描述 小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管.这听起来不算什么,但是这根钢 ...