博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android bundle 对象,在Android中经过Intent使用Bundle传递对象
阅读量:6377 次
发布时间:2019-06-23

本文共 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.}

你可能感兴趣的文章
2013年5月18日星期六
查看>>
js 字符串操作函数集合
查看>>
nullnullCF 312B(Archer-等比数列极限求和)
查看>>
消息函数windows 程序设计 第三章 (下)
查看>>
java中调用web中的jsp或servlet去通知它们做一些操作
查看>>
Javascript 坦克大战
查看>>
JavaScript自动设置IFrame高度(兼容各主流浏览器)
查看>>
Linux内核中__init, __initdata, __initfunc(), asmlinkage, ENTRY(), FASTCALL()等作用
查看>>
leetcode -- Two Sum
查看>>
Windows多线程
查看>>
Resolve PSExec "Access is denied"
查看>>
C语言局部变量和全局变量问题汇总
查看>>
android 下的网络图片加载
查看>>
Paip.语义分析----情绪情感词汇表总结
查看>>
Linux下软件安装,卸载,管理
查看>>
View Programming Guide for iOS_读书笔记[正在更新……]
查看>>
排查VMWare虚拟机的性能问题
查看>>
yum安装Apache Web Server后各个文件存放位置
查看>>
一些基础密码算法的实现
查看>>
Jquery EasyUI的添加,修改,删除,查询等基本操作介绍
查看>>