前面的内容只是针对几个关键的流程进行了分析,大家看完可能对整个包管理机制还不是很了解,本篇对上面的做个总结和概括,主要类的作用在第一篇中已经有简要说明,主要方法的作用在第二篇的安装流程中都有涉及到,这里就不赘述了。
类图如下:
看完大家应该都有注意到上图中并没有把表示应用各个组件信息的类画在这里,是因为有两大类别的数据结构在使用。他们之间又有一些转化关系。我单独把它们拿出来说。
这其中的关系错综复杂,看着都有点头晕。这是因为其实Android的几大组件的信息都是一样的,不管组成什么样的数据结构都无外乎那些内容,这里有多种表示是结合了其他的一些对应内容组合起来的,也是为了多种应用场景下查询和使用的便捷。下面以Activity组件来进行分析,注意receiver也是用的同一个类表示。
Activity的内容是在PackageParser中解析出来的,看一下PackageParser.parserActivity()方法,将其中除了intent以外的信息都存到了Activity类的info中也就是一个ActivityInfo,而将其intent-filter标签里的内容保存到一个ActivityIntentInfo对象中。最终这个对象会和其他组件信息一起组成了Package对象作为包解析的结果。
前文分析中在scanPackageLI方法中,PackagemanagerService又将parser出来的Activity对象组合成了ActivityIntentResolver对象保存在类中,这里保存的对象都是为了方便ActivityManagerService在运行过程中执行组件查询操作的,比如根据Intent查询对应的Activity信息。
另外,大家在本系列第一篇中看到了一组AIDL文件:ActivityInfo,ServiceInfo,ProviderInfo和ResolveInfo等等,这些都是可以在各个进程间传递的应用组件信息的数据结构。
关于整个包管理框架和机制下面有三篇博客大家学习时需要参看一下:
http://wenku.baidu.com/link?url=ODaK5SeUXBja2KZNuiOArrPdI1Cu7fuMdTWSm0xu5BV-ZO-hXrds450AahuwRMz8IHRqTe0QIpU1XvnbNj6tuliurok2kik-zh_q9Xumsv7###
http://blog.csdn.net/goohong/article/details/7881509
http://www.ibm.com/developerworks/cn/opensource/os-cn-android-sec/