PMS的构造过程
SystemServer创建PMS过程
PMS和AMS一样,属于framework中比较重要的系统服务,位于SystemServer进程,它的构造和启动也是通过SystemServer的main中的开启三大类服务发起的:
SystemServer.startOtherServices()
mPackageManagerService = PackageManagerService.main(mSystemContext, installer,mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
在SystemServer的main中调用了PMS的main方法;注意这里传入了一个installer对象,他的构造是在SystemServer中的startCoreService(),代码如下:
Installer installer = mSystemServiceManager.startService(Installer.class);
这个installer和AMS,PMS一样,都是系统服务,PMS中的好多操作都是通过Installer服务实现的;
PMS.main()
public static PackageManagerService main(Context context, Installer installer,boolean factoryTest, boolean onlyCore) {
...
// 分析1
PackageManagerService m = new PackageManagerService(context, installer,factoryTest, onlyCore);
// 分析2
ServiceManager.addService("package", m);
return m;
}
- 调用pms的构造方法
- 将pms交给ServiceManager中,这一步不清楚的同学可以先看ams系列
PMS的构造方法的五个阶段
pms的构造方法非常长,大概可以分为五个阶段,下面详细了解下这五个阶段
阶段一:START 开始阶段
在第一阶段start阶段中,主要是创建了很多关键对象,并且赋值给PMS成员:
mSettings = new Settings(mPermissionManager.getPermissionSettings(), mPackages);
mInstaller = installer;
mPackageDexOptimizer = new