Android进阶之使用Intent传递对象02

来源:互联网 发布:淘宝上自粘墙纸有毒吗 编辑:程序博客网 时间:2024/05/17 07:28

使用Intent来传递对象通常有两种实现方式:Serializable和Parcelable。即把对象序列化。下面来简单对两个进行使用:
Serializable
1,比如有个Person类,其中包含name和age两个属性,将其先用Serializable序列化。

public class Person implements Serializable {    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;    }}

2,FirstActivity的写法:

Person person = new Person();person.setName("Tom");person.setAge(20);Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("person_data",person);startActivity(intent);

3,SecondActivity的写法:

Person person = (Person)getIntent().getSerializableExtra("person_data");int age = person.getAge();String name = person.getName();Toast.makeText(MyApplication.getContext(),"name :" + name + "age : "+age,Toast.LENGTH_SHORT).show();

Parcelable
1,还是使用Person类,这次是实现Parcelable接口。

public class Person 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;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel dest, int flags) {        dest.writeString(name);        dest.writeInt(age);    }    public static final Parcelable.Creator<Person> CREATOR = new Creator<Person>() {        @Override        public Person createFromParcel(Parcel source) {            Person person = new Person();            person.name = source.readString();    //读取name            person.age = source.readInt();        //读取age            return person;        }        @Override        public Person[] newArray(int size) {            return new Person[size];        }    };}

2,FirstActivity的写法:

Person person = new Person();person.setName("Tom");person.setAge(20);Intent intent = new Intent(MainActivity.this,SecondActivity.class);intent.putExtra("person_data",person);startActivity(intent);

3,SecondActivity的写法:

Person person = (Person)getIntent().getParcelableExtra("person_data");        int age = person.getAge();        String name = person.getName();        Toast.makeText(MyApplication.getContext(),"name :" + name + "age : "+age,Toast.LENGTH_SHORT).show();

总结:Serializable会把整个对象进行序列化,而Parcelable的实现原理是将一个完整的对象进行分解,而分解后的每一部分都是intent所支持的数据类型。因此,Parcelable的效率会高于Serializable,所以更加推荐使用Parcelable的方式来实现intent传递对象的功能。

0 0
原创粉丝点击