在Android中通过Intent使用Bundle传递对象的使用方法
程序员文章站
2024-03-01 17:32:10
android开发中有时需要在应用中或进程间传递对象,下面详细介绍intent使用bundle传递对象的方法。
被传递的对象需要先实现序列化,而序列化对象有两种方式:...
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"); }
运行结果截图:
附源码:源码下载
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: CSS实现简单的图片防盗链代码
下一篇: Python标准库sched模块使用指南