4.1.3 Intent对象解析
在意图机制中,组件管理服务负责接收和分析Intent对象,为调用组件选择最合适的实现组件。从实现组件的选择来看,Intent对象可以分成两类:精确描述的Intent(Explicit Intent)和模糊描述的Intent(Implicit Intent)。
精确描述的Intent,指的是所有带有Component信息的Intent对象。调用组件可以通过Intent.setComponent或Intent.setClass等方法进行设置。当组件管理服务收到调用组件发送来的Intent对象,会先校验其Component数据项,如果含有Component信息,组件管理服务就只需要依照Component构造对应的实现组件,并将Intent对象传递给它即可。因此,在精确描述的前提下,Intent对象只是作为消息的载体存在。
除此之外,所有不包含Component信息的Intent对象,都归类于模糊描述的Intent。对于基于模糊描述的Intent调用组件而言,它们不在乎实现组件是谁,只要求该组件能够依照Intent对象中描述的意图和需求完成对应的任务。而对于调度者组件管理服务而言,它的主要职责是依照Intent对象中的各项描述信息,找出当前系统中符合需求的各个组件,并在用户的帮助下选择最适合的实现组件,构造并将Intent对象交给它处理。
在Android中,精确描述的Intent通常用于应用内部的通信,因为调用组件和实现组件彼此了解,不需要动态机制,只需要最快地将消息传递过去就好了。
而模糊描述的Intent,则用于不同应用组件间的互联互通。它的存在将请求者和实现者完全解耦,极大地提升了系统的灵活性。