Android 主要是通过Intent来实现组件之间的相互调用,同时还可以传递附加的数据。这些数据主要是存储在Bundle之中(当调用Intent.putExtras(Bundle)时,Android会复制Bundle中的数据,而不是引用,因此再修改Bundle中的数据并不会改变Intent中携带的数据)。

Bundle之中可以存放基本数据类型以及实现了Serializable或Parcelable接口的类。

当我们要向Bundle中存放一个类Obj(包含两个int成员的简单类),可以让它实现Serializable或Parcelable接口,如下所示:

1.Serializable

public class Obj implements Serializable {private int a;private int b;public Obj(int a, int b) {this.a = a;this.b = b;}@Overridepublic String toString() {return "Obj: [" + a + ", " + b + "]";}}
我们可以通过intent.putExtra("obj", new Obj(1, 2));来将其放入intent中,然后通过 obj =(Obj) intent.getSerializableExtra("obj");来将其取出。

2.Parcelable

public class ObjPar implements Parcelable {private int a;private int b;public ObjPar(int a, int b) {this.a = a;this.b = b;}@Overridepublic String toString() {return "Obj: [" + a + ", " + b + "]";}@Overridepublic int describeContents() {return 0;}@Overridepublic void writeToParcel(Parcel dest, int flags) {dest.writeInt(a);dest.writeInt(b);}public static final Parcelable.Creator<ObjPar> CREATOR = new Creator<ObjPar>() {@Overridepublic ObjPar[] newArray(int size) {return new ObjPar[size];}@Overridepublic ObjPar createFromParcel(Parcel source) {return new ObjPar(source.readInt(), source.readInt());}};}
我们可以通过intent.putExtra("objpar", new ObjPar(1, 2));来将其放入intent中,然后通过 objpar = (ObjPar) intent.getParcelableExtra("objpar"); 来将其取出。

以上是两种向Bundle中存放Object对象的方法,明显可以看出实现Serializable接口更加简单,因为他是一个标记性的接口,并不需要实现某个具体方法。相比而言实现Parcelable接口就显得相对复杂一些,但这样带来的好处是性能的大幅提高。这是因为当我们实现Serializable接口后,真正的序列化工作是由JDK来完成,他需要通过反射来获取成员变量,因为反射的性能并不高,因此这种序列化方式速度慢。然而实现Parcelable接口时,我们提供了该接口中定义方法的实现(writeToParcel实现序列化,createFromParcel实现反序列化),这就避免了反射的使用,因此这种方式速度快。

那么这两种方式,性能差别有多大呢?下面是国外网站上的一个测试结果:Serializable耗时是Parcelable的10倍左右

Android Intent (2) Serializable vs Parcelable_第1张图片

更多相关文章

  1. Android 多个APK共享数据(Shared User ID)
  2. 【Android】性能优化:电量消耗统计
  3. Android中有几种数据存储方式,每种方式有哪些特点?
  4. Android接口回调总结,以及运用到弹窗PopWindow的Demo实现

随机推荐

  1. Android常用UI组件 - EditText
  2. android 触摸事件
  3. Android 强大的JSON助手 GSON
  4. Android 平台的 Microsoft Office & Adob
  5. Android BaseWebLoad组件使用及与js方法
  6. Google C2Dm相关文章
  7. Android自定义Button背景色,弧度
  8. Android自定义TTF字体
  9. network: android 网络判断
  10. Android(安卓)Makefile and build system