抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

Bundle

Bundle 是从 String 键到各种 Parcelable 值的 map。
警告:请注意,Bundle 是一个惰性容器,因此它不实现 equals(Object) 或 hashCode()。

Bundle 继承自 BaseBundle,实现了 Cloneable, Parcelable 接口。

Bundle实现了 Parcelable 接口,所以可以把数据写入到 Parcel 中,并提供了从 Parcel 读取数据的方法: readFromParcel(Parcel)

Parcelable

Parcelable 的实例可以写入 Parcel 或从 Parcel 恢复的类的接口。 实现 Parcelable 接口的类还必须具有一个名为 CREATOR 的非空静态字段,其类型实现 Parcelable.Creator 接口。

Parcel

Parcel 是可通过 IBinder 发送的消息(数据和对象引用)的容器。 Parcel 可以包含将在 IPC 的另一端展开的扁平化数据(使用此处的各种方法来编写特定类型或通用 Parcelable 接口),以及对活动 IBinder 对象的引用,这将导致另一端接收 与 Parcel 中原始 IBinder 连接的代理 IBinder

Parcel 不是通用的序列化机制。 该类(以及用于将任意对象放入 Parcel 的相应 Parcelable API)被设计为高性能 IPC 传输。 因此,将任何 Parcel 数据放入持久存储中是不合适的:Parcel 中任何数据的底层实现的更改都可能导致旧数据不可读

Parcel API 的大部分内容围绕着读取和写入各种类型的数据。 此类函数有六大类可用。

原始类型

最基本的数据函数用于写入和读取原始数据类型:writeByte、readByte、writeDouble、readDouble、writeFloat、readFloat、writeInt、readInt、writeLong、readLong、writeString、readString。 大多数其他数据操作都是建立在这些之上的。 使用主机 CPU 的字节顺序写入和读取给定数据。

原始类型数组

有多种方法可用于读取和写入原始对象的原始数组,这些方法通常会写入 4 字节长度,后跟原始数据项。 读取方法可以将数据读入现有数组,也可以创建并返回一个新数组。

Parcelable

Parcelable 协议为对象从 Parcel 中写入和读取自身提供了极其高效(但低级)的协议。 您可以使用直接方法 writeParcelable(Parcelable, int) 和 readParcelable(ClassLoader) 或 writeParcelableArray 和 readParcelableArray(ClassLoader) 进行写入或读取。 这些方法将类类型及其数据写入 Parcel,从而允许在以后读取时从适当的类加载器重建该类。
还有一些方法提供了更有效的方式来使用 Parcelables:writeTypedObject、writeTypedArray、writeTypedList、readTypedObject、createTypedArray 和 createTypedArrayList。 这些方法不会写入原始对象的类信息:相反,读取函数的调用者必须知道期望的类型并传入适当的 Parcelable.Creator 来正确构造新对象并读取其数据。 (为了更高效地写入和读取不为空的单个Parcelable对象,您可以自己直接调用Parcelable.writeToParcel和Parcelable.Creator.createFromParcel。)

Bundle

称为 Bundle 的特殊类型安全容器可用于异构值的键/值映射。 这在读取和写入数据时进行了许多优化,以提高性能,并且其类型安全的 API 避免了最终将数据内容编组到 Parcel 时难以调试类型错误。 要使用的方法是 writeBundle(Bundle)、readBundle() 和 readBundle(ClassLoader)。

Active Object

Parcel 的一个不寻常的特性是能够读取和写入活动对象。 对于这些对象,不会写入对象的实际内容,而是写入引用该对象的特殊标记。 从 Parcel 读回对象时,您不会获得该对象的新实例,而是获得一个对最初写入的完全相同的对象进行操作的句柄。 有两种形式的活动对象可用。

评论