Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。
被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.Parcelable

Java中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。
两种序列化方式的区别:
1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;
2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;
3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,这种情况建议使用Serializable。

第一步:定义序列化实体类;

Serializable方式:

/**  * PersonSer  *   * @author http://blog.csdn.net/zuolongsnail  */  public class PersonSer implements Serializable {        /**      * serialVersionUID的作用是在修改实体类后,可以正常的序列化和反序列化,在此不多说,大家可以谷歌百度下。      */      private static final long serialVersionUID = -7620435178023928252L;        private String name;        private int age;        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;      }    }  

Parcelable方式:

/**  * PersonPar  *   * @author http://blog.csdn.net/zuolongsnail  */  public class PersonPar implements Parcelable {        private String name;        private int age;        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;      }        /**      * 序列化实体类      */      public static final Parcelable.Creator<PersonPar> CREATOR = new Creator<PersonPar>() {          public PersonPar createFromParcel(Parcel source) {              PersonPar personPar = new PersonPar();              personPar.name = source.readString();              personPar.age = source.readInt();              return personPar;          }            public PersonPar[] newArray(int size) {              return new PersonPar[size];          }      };        @Override      public int describeContents() {          return 0;      }        /**      * 将实体类数据写入Parcel      */      @Override      public void writeToParcel(Parcel parcel, int flags) {          parcel.writeString(name);          parcel.writeInt(age);      }    }  

第二步:传递序列化对象;

Intent intent = new Intent(MainActivity.this, DestActivity.class);  Bundle bundle = new Bundle();  switch (v.getId()) {  case R.id.serializable_btn:      // Serializable传递对象      PersonSer personSer = new PersonSer();      personSer.setName("zuolong");      personSer.setAge(26);      bundle.putSerializable(SER_KEY, personSer);      intent.putExtra("type", SER_TYPE);      intent.putExtras(bundle);      startActivity(intent);      break;  case R.id.parcelable_btn:      // Parcelable传递对象      PersonPar personPar = new PersonPar();      personPar.setName("snail");      personPar.setAge(27);      // Bundle有putParcelableArray和putParcelableArrayList方法,也就可以传递数组和列表      bundle.putParcelable(PAR_KEY, personPar);      intent.putExtra("type", PAR_TYPE);      // Intent也有putParcelableArrayListExtra方法,可以传递实现Parcelable接口的对象列表      intent.putExtras(bundle);      startActivity(intent);      break;  }  

第三步:获取对象;

StringBuffer sb = new StringBuffer();  String type = getIntent().getStringExtra("type");  // 根据type判断是哪种类型  if (type.equals(MainActivity.SER_TYPE)) {      // 获取Serializable对象      PersonSer personSer = (PersonSer) getIntent().getSerializableExtra(              MainActivity.SER_KEY);      sb.append("----From Serializable----").append("\n");      sb.append("Name:").append(personSer.getName()).append("\n");      sb.append("Age:").append(personSer.getAge()).append("\n");  } else if (type.equals(MainActivity.PAR_TYPE)) {      // 获取Parcelable对象      PersonPar personPar = (PersonPar) getIntent().getParcelableExtra(              MainActivity.PAR_KEY);      sb.append("----From Parcelable----").append("\n");      sb.append("Name:").append(personPar.getName()).append("\n");      sb.append("Age:").append(personPar.getAge()).append("\n");  }  

附源码:下载地址

运行结果截图:





更多相关文章

  1. android客户端xmpp & smack & openfire简单开发实例
  2. android webkit 网页标签的解析与预下载的实现
  3. Android界面五种常用布局方式
  4. Android关于Activity屏蔽/拦截Home键
  5. android手机屏幕横竖屏切换禁止调用生命周期函数方法
  6. 【android】 百度地图应用开发(一)
  7. Unity头像上传功能实现 二
  8. 深入浅出Android(安卓)Handler
  9. Handler 消息传递机制介绍

随机推荐

  1. Android(安卓)高效聚焦方案:计算图像模糊
  2. android线程 Handler Message Queue Asyn
  3. Andorid客户端更新,7大改进等你体验~
  4. 这一年半以来,关于 Android,我都写了些什么
  5. Android实现一个天气界面竟然如此简单?
  6. 【SMS】android 短信接收流程分析——-拦
  7. Android图片滚动,加入自动播放功能,使用自
  8. 中国移动互联网:清一色的NOKIA!
  9. Android优秀第三方开源(一)
  10. 阿里云栖大会 app加固小记