主要分为三部分:
- 1.intent的匹配框架
- 2.权限的检查
- 3.程序安装,卸载接口的提供
PMS的框架主要分为三层
- 应用程序层 通过PMS的引用代理向应用程序提供API接口
- MS服务层 和AMS WMS一样运行与SystemServer进程中,PMS启动后通过解析相关的XML文件获得全部程序的包信息,除此之外PMS还有两个服务,一个是DefaultContainerService 主要负责把安装程序复制到程序目录,还有一个Installer服务,Installer服务主要完成程序的解压与数据目录的创建,Installer其实是Socket的客户端,其提供的所有API都会通过Socket将参数发送至 Socket的服务端(installd守护进程)
- 数据文件层 主要本地的程序文件,framework库文件,以及应用程序的数据文件
##PMS包含的重要变量
mPackages 保存所有通过扫描指定目录得到的包信息
mSettings 包含基本上包管理所需的全部信息
mShareLibraries 系统所依赖的共享Java库
mActivities mReceivers mServices mProviders 保存所有应用的四大组件信息
Settings类
在PackageManagerService构造中初始化,通过解析packages.xml等文件,获得所有程序的包管理信息
mPackages 通过解析packages.xml获得的全部应用程序信息
PackageParser.Package类
应用程序的实体类,通过调用scanPackageLI解析apk文件生成,里面包含了应用程序的所有信息
DefaultContainerService类
DefaultContainerService里面包含IMediaContainerService的实现类,DefaultContainerService存在于系统应用中,PMS通过bindService的方式得到IMediaContainerServer的引用代理
(tips:LI、LIF、LPw、LPr的含义,需要先了解PackageManagerService内部使用的两个锁。
因为LI、LIF、LPw、LPr中的L,指的是Lock,而后面跟的I和P指的是两个锁,I表示mInstallLock同步锁。
P表示mPackages同步锁。LPw、LPr中的w表示writing,r表示reading。LIF中的F表示Freeze。)