本文共 3604 字,大约阅读时间需要 12 分钟。
被传递的对象须要先实现序列化,而序列化对象有两种方式:java.io.Serializable和android.os.ParcelableJava中使用的是Serializable,而谷歌在Android使用了自定义的Parcelable。两种序列化方式的区别:1.在使用内存的时候,Parcelable比Serializable性能高,推荐使用Parcelable类;2.Serializable在序列化的时候会产生大量的临时变量,从而引发频繁的GC;3.Parcelable不能使用在要将数据存储在磁盘上的状况,由于Parcelable不能很好的保证数据的持续性在外界有变化的状况下,这种状况建议使用Serializable。第一步:定义序列化实体类;java
Serializable方式:android
1./**app
2.* PersonSeride
3.*性能
4.* @author http://blog.csdn.net/zuolongsnailthis
5.*/spa
6.publicclassPersonSerimplementsSerializable {.net
7.orm
8./**
9.* serialVersionUID的做用是在修改实体类后,能够正常的序列化和反序列化,在此很少说,你们能够谷歌百度下。
10.*/
11.privatestaticfinallongserialVersionUID = -7620435178023928252L;
12.
13.privateString name;
14.
15.privateintage;
16.
17.publicString getName() {
18.returnname;
19.}
20.
21.publicvoidsetName(String name) {
22.this.name = name;
23.}
24.
25.publicintgetAge() {
26.returnage;
27.}
28.
29.publicvoidsetAge(intage) {
30.this.age = age;
31.}
32.
33.}
Parcelable方式:
1./**
2.* PersonPar
3.*
4.* @author http://blog.csdn.net/zuolongsnail
5.*/
6.publicclassPersonParimplementsParcelable {
7.
8.privateString name;
9.
10.privateintage;
11.
12.publicString getName() {
13.returnname;
14.}
15.
16.publicvoidsetName(String name) {
17.this.name = name;
18.}
19.
20.publicintgetAge() {
21.returnage;
22.}
23.
24.publicvoidsetAge(intage) {
25.this.age = age;
26.}
27.
28./**
29.*序列化实体类
30.*/
31.publicstaticfinalParcelable.Creator CREATOR =newCreator() {
32.publicPersonPar createFromParcel(Parcel source) {
33.PersonPar personPar =newPersonPar();
34.personPar.name = source.readString();
35.personPar.age = source.readInt();
36.returnpersonPar;
37.}
38.
39.publicPersonPar[] newArray(intsize) {
40.returnnewPersonPar[size];
41.}
42.};
43.
44.@Override
45.publicintdescribeContents() {
46.return0;
47.}
48.
49./**
50.*将实体类数据写入Parcel
51.*/
52.@Override
53.publicvoidwriteToParcel(Parcel parcel,intflags) {
54.parcel.writeString(name);
55.parcel.writeInt(age);
56.}
57.
58.}
第二步:传递序列化对象;
1.Intent intent =newIntent(MainActivity.this, DestActivity.class);
2.Bundle bundle =newBundle();
3.switch(v.getId()) {
4.caseR.id.serializable_btn:
5.// Serializable传递对象
6.PersonSer personSer =newPersonSer();
7.personSer.setName("zuolong");
8.personSer.setAge(26);
9.bundle.putSerializable(SER_KEY, personSer);
10.intent.putExtra("type", SER_TYPE);
11.intent.putExtras(bundle);
12.startActivity(intent);
13.break;
14.caseR.id.parcelable_btn:
15.// Parcelable传递对象
16.PersonPar personPar =newPersonPar();
17.personPar.setName("snail");
18.personPar.setAge(27);
19.// Bundle有putParcelableArray和putParcelableArrayList方法,也就能够传递数组和列表
20.bundle.putParcelable(PAR_KEY, personPar);
21.intent.putExtra("type", PAR_TYPE);
22.// Intent也有putParcelableArrayListExtra方法,能够传递实现Parcelable接口的对象列表
23.intent.putExtras(bundle);
24.startActivity(intent);
25.break;
26.}
第三步:获取对象;
1.StringBuffer sb =newStringBuffer();
2.String type = getIntent().getStringExtra("type");
3.//根据type判断是哪一种类型
4.if(type.equals(MainActivity.SER_TYPE)) {
5.//获取Serializable对象
6.PersonSer personSer = (PersonSer) getIntent().getSerializableExtra(
7.MainActivity.SER_KEY);
8.sb.append("----From Serializable----").append("\n");
9.sb.append("Name:").append(personSer.getName()).append("\n");
10.sb.append("Age:").append(personSer.getAge()).append("\n");
11.}elseif(type.equals(MainActivity.PAR_TYPE)) {
12.//获取Parcelable对象
13.PersonPar personPar = (PersonPar) getIntent().getParcelableExtra(
14.MainActivity.PAR_KEY);
15.sb.append("----From Parcelable----").append("\n");
16.sb.append("Name:").append(personPar.getName()).append("\n");
17.sb.append("Age:").append(personPar.getAge()).append("\n");
18.}