欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

运行结果截图:在Android中通过Intent使用Bundle传递对象的使用方法在Android中通过Intent使用Bundle传递对象的使用方法

附源码:源码下载

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