0

由于应用程序可以为应用程序的不同组件定义相同的意图过滤器,因此意图很可能会匹配同一应用程序的多个组件。如果是这样,会发生什么?会不会有错误?

4

2 回答 2

1

如果是这样,会发生什么?

假设您指的是startActivity(),那么我希望您的应用程序中的所有匹配活动以及设备上匹配的任何其他活动都出现在选择器中。

会不会有错误?

可能不是。但是请注意,您所描述的内容非常不寻常。通常,应用程序只需要一个活动来响应任何给定的Intent结构。

于 2013-04-07T17:19:20.160 回答
0

最合适的意图过滤器将捕获意图。从文档

隐式意图需要不同的策略。在没有指定目标的情况下,Android 系统必须找到处理意图的最佳组件(或多个组件)——单个活动或服务来执行请求的操作或一组广播接收器来响应广播公告。它通过将 Intent 对象的内容与意图过滤器(与可能接收意图的组件关联的结构)进行比较来实现这一点。过滤器宣传组件的功能并划定它可以处理的意图。它们使组件有可能接收广告类型的隐式意图。如果组件没有任何意图过滤器,则它只能接收显式意图。带有过滤器的组件可以接收显式和隐式意图。

...

过滤器具有与 Intent 对象的操作、数据和类别字段平行的字段。在所有三个区域中针对过滤器测试隐式意图。要交付给拥有过滤器的组件,它必须通过所有三个测试。即使其中一个失败,Android 系统也不会将其传递给组件——至少不会基于该过滤器。但是,由于一个组件可以有多个意图过滤器,因此未通过组件过滤器之一的意图可能会通过另一个过滤器。

简而言之:不会有错误。系统试图找到与意图的最佳匹配,这可能偶尔会涉及到用户(想想你安装新浏览器的时候)。

于 2013-04-07T17:13:35.857 回答