(Android基础)关于PMS

主要分为三部分:

  • 1.intent的匹配框架
  • 2.权限的检查
  • 3.程序安装,卸载接口的提供

PMS的框架主要分为三层

  1. 应用程序层 通过PMS的引用代理向应用程序提供API接口
  2. MS服务层 和AMS WMS一样运行与SystemServer进程中,PMS启动后通过解析相关的XML文件获得全部程序的包信息,除此之外PMS还有两个服务,一个是DefaultContainerService 主要负责把安装程序复制到程序目录,还有一个Installer服务,Installer服务主要完成程序的解压与数据目录的创建,Installer其实是Socket的客户端,其提供的所有API都会通过Socket将参数发送至 Socket的服务端(installd守护进程)
  3. 数据文件层 主要本地的程序文件,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。)

您的一份奖励,就是我的一份激励