对于Android来说传递复杂类型,主要是将自己的类转换为基础的字节数组,Activity之间传递数据是通过Intent实现的。 Android序列化对象主要有两种方法,实现Serializable接口、或者实现Parcelable接口。实现Serializable接口是Java
SE本身就支持的,而Parcelable是Android特有的功能,效率比实现Serializable接口高,而且还可以用在进程间通信(IPC)中。实现Serializable接口非常简单,声明一下就可以了。而实现Parcelable接口稍微复杂一些,但效率更高,推荐用这种方法提高性能。
Parcelable接口的作用:实现了Parcelable接口的实例可以将自身的状态信息(状态信息通常指的是各成员变量的值)写入Parcel,也可以从Parcel中恢复其状态。
Parcel用来完成数据的序列化传递。下面就介绍一下实现Parcelable接口的方法。
通过实现Parcelable接口序列化对象的步骤:


1、实现Parcelable接口。

2、并且实现Parcelable接口的public
void writeToParcel(Parcel dest, int flags)方法

3、自定义类型中必须含有一个名称为CREATOR的静态成员,该成员对象要求实现Parcelable.Creator接口及其方法。
简而言之:通过writeToParcel将你的对象映射成Parcel对象,再通过createFromParcel将Parcel对象映射成你的对象。也可以将Parcel
看成是一个流,通过writeToParcel把对象写到流里面,在通过createFromParcel从流里读取对象,只不过这个过程需要你来实现,因此写的顺序和读的顺序必须一致。

示例代码:
[java]
1. package com.yang.domain;
2.
3. import android.os.Parcel;
4. import android.os.Parcelable;
5.
6. public class Person implements Parcelable {
7. //这里定义了两个变量来说明读和写的顺序要一致
8. private Integer id;
9. private String name;
10.
11. public Person() {
12. }
13.
14. public Person(Integer id, String name) {
15.
16. this.id = id;
17. this.name = name;
18. }
19.
20. public Integer getId() {
21. return id;
22. }
23.
24. public void setId(Integer id) {
25. this.id = id;
26. }
27.
28. public String getName() {
29. return name;
30. }
31.
32. public void setName(String name) {
33. this.name = name;
34. }
35.
36. @Override
37. public int describeContents() {
38. return 0;
39. }
40.
41. @Override
42. public void writeToParcel(Parcel dest, int flags) {
43. // 把javanbean中的数据写到Parcel。先写id然后写name
44. dest.writeInt(this.id);
45. dest.writeString(this.name);
46. }
47.
48. // 添加一个静态成员,名为CREATOR,该对象实现了Parcelable.Creator接口
49. public static final Parcelable.Creator<Person> CREATOR = new Parcelable.Creator<Person>() {
50. @Override
51. public Person createFromParcel(Parcel source) {
52. // 从Parcel中读取数据,返回person对象
53. return new Person(source.readInt(), source.readString());
54. }
55.
56. @Override
57. public Person[] newArray(int size) {
58. return new Person[size];
59. }
60. };
61. }

注:Parcelable接口在Android当中有非常之多的子类,如下截图:


android Parcelable接口序列化对象_第1张图片


并且Intent当中也定义了很多关于Parcelable的get、set方法,如:
Intent putExtra(String name,Parcelable value)
Add extended data to the intent.

<T extends Parcelable> T getParcelableExtra(String name)
Retrieve extended data from the intent.
并且Intent本身也实现了Parcelable接口,因此在Android开发当中是非常推荐以Parcelable作为工具传递

更多相关文章

  1. Android VideoView设置静音,Android 设置VideoView静音,Android
  2. ListView去掉分割线的几种方法
  3. SDK Platform Tools component is missing! Please use the SDK
  4. 【Android 初学】10、Intent对象的使用
  5. Android Market google play store帐号注册方法流程 及发布应用
  6. Android 实现全屏显示的几种方法整理
  7. Android中Parcelable接口的使用
  8. Android中TextView中内容不换行的解决方法
  9. Android模拟、实现、触发系统按键事件的方法

随机推荐

  1. Android应用开发之RelativeLayout (相对
  2. Android启动脚本init.rc(1)
  3. Android 的源代码结构
  4. 条码扫描二维码扫描—ZXing android 改进
  5. android 测试必备 -adb 工具的使用
  6. Android onDraw
  7. 最新android sdk版本号和sdk的对应关系
  8. Android 动画方案
  9. Android Log详解!
  10. [Android] ubuntu 下不识别 Android 设备