软件编程
位置:首页>> 软件编程>> Android编程>> 在Android中通过Intent使用Bundle传递对象的使用方法

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

作者:Snail  发布时间:2023-04-23 10:15:38 

标签:bundle,Android

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传递对象的使用方法

附源码:源码下载

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com