您的位置:首页 > 移动开发 > Android开发

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

2014-08-09 00:50 288 查看
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方式:

[java] view
plaincopy

/** 

 * 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方式:

[java] view
plaincopy

/** 

 * 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);  

    }  

  

}  

第二步:传递序列化对象;

[java] view
plaincopy

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;  

}  

第三步:获取对象;

[java] view
plaincopy

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

}  

附源码:下载地址

运行结果截图:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: