4.1 Intent对象的作用和构成
Android意图机制最核心的设计思想,就是引入了组件管理服务作为连接组件的管理者。该服务可以通过组件的配置信息了解系统中每个组件的类别和功能,从而帮助调用组件寻找符合其需求的实现组件,将调用者与实现者彻底解耦。
图4-1描述了组件连接模型,在整个意图机制下,有三方角色参与组件间的连接和通信。
❑调用组件
调用组件是连接请求的发起者,它期望寻找其他组件来帮助完成所需的功能。调用组件可以是界面组件、服务组件或触发器组件,通过调用Context.startActivity和Context.bindService等函数发起对目标组件的连接请求。
❑实现组件
实现组件指的是响应调用者请求完成所需任务的组件。在Android中,每个组件都可以作为调用者请求第三方帮助,也都可以扮演实现者去完成对应的请求。对于实现组件而言,它不需要关注其调用者是谁,只需要依照请求者发送的Intent对象去执行相关功能即可。
❑组件管理服务
在调用组件与实现组件的连接过程中,组件管理服务扮演了调度者的角色。它从调用组件中接收到Intent对象,然后将该对象与应用管理服务收集到的组件Intent Filter对象进行比较,从中选择出符合调用组件需求的实现组件,最后构造并调用实现组件对象。组件管理服务是一个系统服务,运行在系统核心进程的独立线程中,通过进程间通信机制,与各个组件进行交互。
图 4-1 组件连接模型
4.1.1 Intent对象的作用
在整个组件连接的过程中,Intent对象扮演了重要的角色。它贯穿了整个连接过程的始终,对调用组件、组件管理服务和实现组件而言,有着不同的作用。
首先,Intent对象是组件间通信信息的载体。它封装了调用组件提供的指令和数据,通过组件管理服务序列化传递给实现组件,实现组件可以利用这些信息完成所需功能。
其次,Intent对象定义了组件间连接协议。每个Intent对象都包含若干个数据项,每个数据项都有其内涵。调用者组件根据这些规范构造Intent对象描述其需求;实现组件根据这些规范解析Intent对象执行所需功能;而组件管理服务依照这些规范寻找与需求匹配的组件,构造连接。
此外,对于组件管理服务而言,Intent对象会指导其如何构造实现组件,从而配置实现组件运行的进程环境和任务环境等。
[1]在Android的四大组件中,数据源组件是唯一不使用Intent对象进行连接调用的,不归属于意图机制的范畴。因此,本章中所讨论的内容均不涉及数据源组件,如果出现泛指的组件一词,均代指除数据源组件外的其他组件。关于数据源的使用,可以参考第3章数据源组件一节。