请问和某个intent匹配的程序列表的排序先后有什么依据?能改变吗?

salmon
  • 20

请问和某个intent匹配的程序列表的排序先后有什么依据?能改变吗?

回复
阅读 2.1k
1 个回答
✓ 已被采纳

当组件管理服务,在收到请求组件的Intent(设为intentA)后,先查看intentA对象是包含了Component信息,如果有,无须匹配。
如果没有,则会从应用管理服务中获取所有组件的Intent Filter信息,并与intentA目标比较。

比较的算法如下:

1)比较Action,如果intentA未包含Action,或者系统所有的Inent Filter没有匹配的Action,则转到2);

2)比较Data和Type
2-1)如果intentA中无Data或者Type项,那么Intent Filter中也不能有,否则匹配失败;
2-2)如果intentA包含Type,则必须Intent Filter的Type与之对应(可使用通配符比较),否则比配失败;
2-3)如果intentA包含Data,则会将Data的URI信息拆分成Scheme和Authority等部分,逐一与Intent Filter对象中的对应部分进行比较,两者必须完全相等,方可匹配成功。
如果1)和2)都匹配成功,则进入3)

3)匹配Category,如果intentA无Category,则成功;否则,必须要求intentA中包含的所有Category都出现在相应Intent Filter的Category中,不然则匹配失败,即仅当intntA对象的Category项集合是Intent Filter对象Catetory项集合子集时,匹配才能成功。

详情请参考《Android开发精要》第四章第二节。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏