首页 > 系统 > Android > 正文

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

2019-12-12 04:45:16
字体:
来源:转载
供稿:网友

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

运行结果截图:

附源码:源码下载

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表