Android中Intent的匹配框架(一)

 最近在整理有关Intent方面的资料,相信对Intent的使用,以及IntentFilter的功能,每位程序员都已了解的都熟透了!

小弟只是想和大家分享一下Intent在框架层是如何匹配的。

 

intent匹配主要解决应用程序中没有指定Component名称的情况。PmS在初始化时,会从所有应用程序的 AndroidManifest.xml文件中读取intent-filter的值,然后建立一个内部数据结构,以后应用程序可以通过PackageManager提供的queryXXX()方法分别查询不同的Component的包信息

 

下面就以Activity的匹配过程为例说明匹配架构设计的思路,其他类型的匹配与此类似,有兴趣的可以自行研究。

 

 首先,PackageManger类中定义了4个query函数,分别用于匹配Framework定义的四种不同的Component,分别是Activity,Service,Receiver,ContentProvider

在PsM内部,分别定义了四个变量,PsM使用这四个变量分别保存不同类型Component的intent匹配相关的数据信息。其中所有匹配到Activity的intent-filter信息保存在ActivityIntentResolver内部类对象中;

同时,Pms内部提供了四个对应的query函数,这些函数和PackageManager定义的query()函数 一一对应。这些函数内部执行的操作正是从以上四个数据类中提取出匹配到的信息,并将这些信息按照PackageManager中定义的返回值类型重新组合,并返回。

 

你可能感兴趣的:(数据结构,android,框架,架构设计,service,query)