在Android中通过Intent使用Bundle传递对象

Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。被传递的对象需要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.ParcelableJava中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。两种序列化方式的区别:1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;2.Serializable在序列化的时候会产生大量的临时变量,从而引起频繁的GC;3.Parcelable不能使用在要将数据存储在磁盘上的情况,因为Parcelable不能很好的保证数据的持续性在外界有变化的情况下,,这种情况建议使用Serializable。第一步:定义序列化实体类;

Serializable方式:

/** * PersonSer * * @author */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 */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];}};@Overridepublic int describeContents() {return 0;}/** * 将实体类数据写入Parcel */@Overridepublic 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");}

附源码:下载地址

运行结果截图:

版权声明:本文为博主原创文章,未经博主允许不得转载。

何愁没有快乐的泉溪在歌唱,何愁没有快乐的鲜花绽放!

在Android中通过Intent使用Bundle传递对象

相关文章:

你感兴趣的文章:

标签云: