Intent 数据传递

 我来答
户如乐9318
2022-06-08 · TA获得超过6633个赞
知道小有建树答主
回答量:2559
采纳率:100%
帮助的人:136万
展开全部

Activity 组件启动,Intent 类携带目标组件类信息,组件间传递的数据。

复杂类型必须实现 Parcelable 或 Serializable 接口。

Intent 类,继承 Parcelable,支持序列化,适合进程间通信。

Intent 内部数据,包括 mAction mData mPackage 等系统数据及 Bundle mExtras 自定义数据。

向 Intent 写入 自定义数据。
Intent 的 putExtra()方法,将 key-value 写入内部 Bundle mExtras,简单或复杂类型,(如 int,short,float,String,Parcelable,Serializable)

putExtras() 方法,写入 Bundle 数据

将 Bundle 参数中的存储内容合并。

Bundle 内部 ArrayMap 数据结构存储。

Bundle 继承 BaseBundle 类,putInt() 方法,是父类的方法。
Bundle 和 BaseBundle 相关方法。

ArrayMap 类存储 key-value,Bundle 的 putParcelable() 方法。

所有数据都是在 ArrayMap 数据结构存储。

Activity 组件间跳转时,Intent 数据通过 Parcel 在进程间通信。

IActivityManager 的 startActivity() 方法,向 system_service 进程 Ams 服务发送请求。

Parcel 写入数据,系统参数 resolvedType ,callingPackage 等,(String、int、Binder类型)
根据不同类型,Parcel 类的 writeXxx() 相关方法。

Intent writeToParcel() 方法,内部数据写入。

将 Intent 内部 mAction,mFlags ,Bundle mExtras 数据 写入 Parcel 。
对于 Bundle mExtras 数据。Parcel 类 writeBundle() 方法。

Bundle writeToParcel() 方法。

将 ArrayMap 每项数据,包括 key 和 value。writeValue() 方法,根据 Object,类型,选择不同的写入方法,
关于 Bundle 中复杂 Parcelable 数据类型,写入 Parcel
参考 Android Parcelable

在 onCreate() 方法启动时,getIntent() 获取的 Intent 初始化时机。

Ams 服务进程通过 ApplicationThreadProxy 代理回调 App 进程时,App进程将调用ApplicationThreadNative的onTransact方法,它继承Binder。

Binder的#execTransact方法,创建两个Parcel对象,在参数data中,已经保存了Ams进程传递的数据。

Intent 实现 Parcelable 接口,通过内部 CREATOR,创建一个新 Intent 对象。

因此,在Ams进程回调App,App启动组件生命周期前已经创建Intent,在ApplicationThread的#scheduleLaunchActivity方法,传给App主线程。

Intent 构造方法

提取 Parcel 中的 Intent 字段。

根据不同类型,Parcel 类 readXxx() 方法,解析数据向新 Intent 赋值。
Parcel readBundle()方法,解析 Intent Bundle mExtras 数据。
参考 Parcel 解析 Bundle 数据

Intent 构建完毕。

Activity 组件启动,在 onCreate() 方法,Intent 类 getXxx() 方法,获取自定义数据。

从 Intent 内部 Bundle 获取数据。
Intent 类 getParcelableExtra()方法,获取 XxxBean 实例。

Bundle getParcelable() 方法,从 ArrayMap 读取。

从 ArrayMap 读取前,先调用一次 unparcel() 方法,
将 Bundle 内 Parcel 数据初始化到 ArrayMap ,否则 ArrayMap 数据是空的。

参考 Parcel 解析 Bundle 数据

任重而道远

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ZESTRON
2024-09-04 广告
在Dr. O.K. Wack Chemie GmbH,我们高度重视ZESTRON的表界面分析技术。该技术通过深入研究材料表面与界面的性质,为提升产品质量与可靠性提供了有力支持。ZESTRON的表界面分析不仅涵盖了相变化、化学反应、吸附与解吸... 点击进入详情页
本回答由ZESTRON提供
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式