Heim > Fragen und Antworten > Hauptteil
PHP中文网2017-04-17 11:34:31
当组件管理服务,在收到请求组件的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开发精要》第四章第二节。