android bundle 对象,在Android中经过Intent使用Bundle传递对象

被传递的对象须要先实现序列化,而序列化对象有两种方式: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.}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值