对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java

SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。 Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。

Parcel用来完成数据的序列化传递。

通过实现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 {public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {@Overridepublic Person[] newArray(int size) {return null;}@Overridepublic Person createFromParcel(Parcel source) {Person result = new Person();result.age = source.readInt();result.name = source.readString();result.address = source.readParcelable(Address.class.getClassLoader());return result;}};private Address address;private String name;private int age;@Overridepublic int describeContents() {return 0;}public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(age);dest.writeString(name);dest.writeParcelable(address, PARCELABLE_WRITE_RETURN_VALUE);}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [address=" + address + ", name=" + name + ", age=" + age+ "]";}}

最后在使用的时候可以用 intent.putExtra,直接存入Parce 最后说明一下,官方的文档里说在不同进程之间使用Parce,在同进程内使用Bind,但在我测试的时候发现,不管是activity之间的传递,还是activit到service到broadcast,都是可以用Parce的

public void sendBroadCast(View viwe){    Log.d("test",Thread.currentThread().getName()+ "发送了一个消息给广播");    Person person = new Person();    person.setAge(18);    Address address = new Address();    address.setStreet("延陵南路");    person.setName("carlos");    person.setAddress(address);    //    Intent intent = new Intent("aaaa");    Intent intent = new Intent("aaaa");    intent.setClass(this, SendActivity.class);//    intent.putParcelableArrayListExtra(name, value)    intent.putExtra("person", person);//    sendBroadcast(intent);    startActivity(intent);        }

更多相关文章

  1. android 进程
  2. Android接口安全 - RSA+AES混合加密方案
  3. Android接口定义语言---AIDL(一)
  4. android将对象写入文件和从文件中读取对象数据
  5. Android中获取系统内存信息以及进程信息-----ActivityManager的
  6. android获取进程信息,运行内存信息

随机推荐

  1. Android(安卓)SQLite
  2. 让Qt应用程序跑在Android上
  3. android开发(46) 使用 textview实现文字
  4. Android源码阅读分析:从Activity开始(二)—
  5. Android(安卓)Project和app中两个build.g
  6. 通過XML設置屏幕方向(android:screenOrie
  7. Android(安卓)H5和App交互以及打开图库上
  8. Android中Fragment的应用(android官方教程
  9. 【Android】Uri、UriMatcher、ContentUri
  10. android 工程师 你必须知道的