A mapping from String keys to various
Parcelable values.Note that
Bundle is a lazy container and as such it does NOT implement Object.equals(java.lang.Object) or Object.hashCode().📝 简单使用
使用说明
- 键值对存储:
Bundle使用键值对来存储数据。
- 数据类型:支持
String,int,boolean,Bundle,Parcelable等。
- 序列化:
Bundle传递的时候,需要被序列化和反序列化。- 对于非基本对象,需要使用
Parcelable进行序列化。
- 控制数据大小:
Bundle在进程间传输时是基于Binder进行的,所以不应该用于传输大量数据。
在组件间传递
通过Intent在活动(Activities)、服务(Services)和广播接收器(Broadcast Receivers)间传递数据。
- 使用例子:
保存和恢复状态
Configuration更改(如设备旋转)或内存不足时保存和恢复活动或片段(Fragments)的状态。
- 使用例子:
简单原理
- 序列化机制:
Bundle通过实现Parcelable接口支持序列化。- 数据通过Bundle传输的时候,都需要被序列化和反序列化。
- 进程内:
- 当通过
Bundle进行进程内数据传输时,这些数据需要被序列化到内存缓冲区中。
- 进程间:
- 当
Bundle在进程间传递时,它依赖于Binder IPC机制。 - Binder的需要进行一次用户空间和内核空间之间的数据拷贝,且能传输的数据大小有限,不同的厂商对ROM可能有不同的定制。
🤗 总结归纳
- 使用简单:Bundle机制,可以很简单得实现数据在组件、进程中传递。
- 大小限制:
- 进程内传递时,要将数据缓存在内存缓冲区中,不建议传递大数据。
- 进程间传递时,由于Binder的限制,不能传递大数据。
- 序列化:对于传递数据,都要进行序列化。
📎 参考文章
- Author:CoderWdd
- URL:https://www.wuinsights.top//article/01HVJGGPNBN5GVMAF7P0S5F106
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts



