😀
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的限制,不能传递大数据。
  • 序列化:对于传递数据,都要进行序列化。

📎 参考文章

 
Android序列化Kotlin相比Java的新特性
Loading...