Android 通过Intent使用Bundle传递对象详细介绍

Android 通过Intent使用Bundle传递对象详细介绍,第1张

概述Android通过Intent使用Bundle传递对象Android开发中有时需要在应用中或进程间传递对象,下面详细介绍Intent使用Bundle传递对象的方法。

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"); } 

附源码:下载地址

运行结果截图:

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

总结

以上是内存溢出为你收集整理的Android 通过Intent使用Bundle传递对象详细介绍全部内容,希望文章能够帮你解决Android 通过Intent使用Bundle传递对象详细介绍所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147716.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存