Android 意图解析Intent Resolution

意图可以被分成两组:

• 显式意图通过名字指明目标组件(这个组件名字字段component name field, 前面提到过,有一个数值集)。既然组件名称通常不为其他应用程序的开发者所了解,显式意图典型的被用作应用程序的内部消息-例如一个活动启动一个附属服务或姊妹活动。

• 隐式意图不命名目标组件(组件名称字段为空)。隐式意图经常用来激活其他应用程序的组件。

Android 递交一个显式的意图给一个指定目标类的实例。意图对象中的组件名称唯一的确定哪个组件应该获取这个意图。

隐式意图需要一个不同的策略。在没有指定目标的情况下,Android 系统必须找到最合适的组件来处理这个意图-单个活动或者服务来执行这个请求动作或者一系列的广播接收器来应对广播通告。

这是通过比较意图对象的内容和意图过滤器,有可能接收意图的组件相关结构。

过滤器公布一个组件具备的能力以及限定它能处理的意图。他们使组件接收该公布类型的隐式意图成为可能。

如果一个组件没有任何的意图过滤器,那它只能接收显式意图。一个带过滤器的组件可以同时接收显式和隐式意图。

当一个意图对象被一个意图过滤器测试时,只有三个方面会被参考到:

动作

数据(URI 以及数据类型)

类别

附加信息和标志并不参与解析哪个组件接收一个意图。