android中Intent传值与Bundle传值详解

本篇文章是 对android中Intent传值与Bundle传值的区别进行了详细的分析介绍,

概念介绍
Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动 作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的 交互。因此,可以将Intent理解为不同组件之间通信的“媒介”专门提供组件互相调用的相关信息。
Intent传值

可以传递的类型

  • Serializable
  • charsequence: 主要用来传递String,char等
  • 列表内容
  • parcelable
  • Bundle

ps:两种序列化对象方法简单介绍:
实际上让对象实现Serializable接口和Parcelbale接口就是实现对象的序列化。

对象的序列化:把对象数据转成字节序列的过程就称之为对象的序列化。
对象的反序列化:把字节序列恢复成对象数据的过程就是反序列化。

对象序列化的目的:
(1)实现对象数据的持久化 ,就是把对象数据保存到文件、数据库中。
(2)在网络中、程序内部以及程序间传输对象数据。

这两种实现对象序列化方式的比较:
Parcelable的性能要比Serializable好,内存开销小,一般用于内存间数据的传输。如Activity间数据的传输。
Serializable主要用于对象数据的持久化以及网络间对象数据的传输。
Bundle传值类型
1.键值对储存
2.传递的数据可以是boolean、byte、int、long、float、double、string等基本类型或它们对应的数组,也可以是对象或对象数组。
3.当Bundle传递的是对象或对象数组时,必须实现Serializable 或Parcelable接口

在数据传递超过两个界面的时候,使用bundle便于数据的传输;

ps:现在我要把值通过A经过B传给C,你怎么传 如果用Intent的话, A-B先写一遍,再在B中都取出来 然后在把值塞到Intent中再跳到C,累吗?
如果我在A中用了 Bundle 的话,我把Bundle传给B,在B中再转传到C ,C就可以直接去了 ,这样的话 还有一个好处,就是在B中,还可以给Bundle对象添加新的 key - value ,同样可以在C中取出来。
如果仅从这点看,还不足以看出Bundle的特别之处,我们知道Intent 传递参数是有类型限制的,例如String ,int ,float等,它是不能传递对象的,那么Bundle可以么?答案是可以的,不难发现Bundle 中有一个方法putSerializable,利用该对象就可以传递对象了,不过传递的对象要实现Serializable接口:

猜你喜欢

转载自blog.csdn.net/muranfei/article/details/80882075