Bundle源码解析

本文详细剖析了Android中Bundle的用途、源码结构,重点分析了Bundle的构造方法、数据存取实现,揭示了Bundle如何作为数据容器在Activity、Fragment及消息机制中传递数据的原理。
摘要由CSDN通过智能技术生成

Bundle的概念理解

Bundle对于Android开发者来说肯定非常眼熟,它经常出现在以下场合:

  1. Activity状态数据的保存与恢复涉及到的两个回调:void onSaveInstanceState (Bundle outState)void onCreate (Bundle savedInstanceState)
  2. Fragment的setArguments方法:void setArguments (Bundle args)
  3. 消息机制中的Message的setData方法:void setData (Bundle data)
  4. 其他场景不再列举

Bundle从字面上解释为“一捆、一批、一包”,结合上述几个应用场合,可以知道Bundle是用来传递数据的,我们暂将Bundle理解为Android中用来传递数据的一个容器。官方文档对Bundle的说明如下:

A mapping from String values to various Parcelable types.

官方意为Bundle封装了String值到各种Parcelable类型数据的映射,可见跟我们上述理解是吻合的。

Bundle源码分析

知道了Bundle的主要作用,再来看源码就容易理解了。

Bundle位于android.os包中,是一个final类,这就注定了Bundle不能被继承。Bundle继承自BaseBundle并实现了Cloneable和Parcelable两个接口,因此对Bundle源码的分析会结合着对BaseBundle源码进行分析。由于实现了Cloneable和Parcelable接口,因此以下几个重载是必不可少的:

  • public Object clone()
  • public int describeContents()
  • public void writeToParcel(Parcel parcel, int flags)
  • public void readFromParcel(Parcel parcel)
  • public static final Parcelable.Creator<Bundle> CREATOR = new Parcelable.Creator<Bundle>()

以上代码无需过多解释。

Bundle的几个公有构造方法
公有构造方法 说明
public Bundle() Constructs a new, empty Bundle
public Bundle(ClassLoader loader) Constructs a new, empty Bundle that uses a specific ClassLoader for instantiating Parcelable and Serializable objects.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值