Android服务之PackageManagerService启动源码分析

了解了Android系统的启动过程的读者应该知道,Android的所有Java服务都是通过SystemServer进程启动的,并且驻留在SystemServer进程中。SystemServer进程在启动时,通过创建一个ServerThread线程来启动所有服务,本文主要介绍Android服务中PackageManagerService服务启动过程。首先介绍一些PackageManagerService服务下的相关类关系图:


SystemServer进程的ServerThread线程中,执行以下代码启动PackageManagerService服务:

  1. // 通过读取属性来判断运行核心应用  
  2. String cryptState = SystemProperties.get("vold.decrypt");  
  3. boolean onlyCore = false;  
  4. if (ENCRYPTING_STATE.equals(cryptState)) {  
  5.     Slog.w(TAG, "Detected encryption in progress - only parsing core apps");  
  6.     onlyCore = true;  
  7. else if (ENCRYPTED_STATE.equals(cryptState)) {  
  8.     Slog.w(TAG, "Device encrypted - only parsing core apps");  
  9.     onlyCore = true;  
  10. }  
  11. //启动PackageManagerService  
  12. pm = PackageManagerService.main(context,  
  13.         factoryTest != SystemServer.FACTORY_TEST_OFF,  
  14.         onlyCore);  
  15. boolean firstBoot = false;  
  16. //判断PackageManagerService是否是第一次启动,SystemServer进程被杀后会被重启  
  17. try {  
  18.     firstBoot = pm.isFirstBoot();  
  19. catch (RemoteException e) {  
  20. }  
  21. //PackageManagerService执行dex优化  
  22. ...  
  23. try {  
  24.     pm.performBootDexOpt();  
  25. catch (Throwable e) {  
  26.     reportWtf("performing boot dexopt", e);  
  27. }  

首先启动PackageManagerService,然后判断该服务是否是第一次启动,接着执行dex优化。

  1. public static final IPackageManager main(Context context, boolean factoryTest,  
  2.         boolean onlyCore) {  
  3.     //构造PackageManagerService服务对象  
  4.     PackageManagerService m = new PackageManagerService(context, factoryTest, onlyCore);  
  5.     //注册PackageManagerService服务  
  6.     ServiceManager.addService("package", m);  
  7.     return m;  
  8. }  
启动过程比较简单,就是构造一个 PackageManagerService 对象,然后将该服务对象注册到 ServiceManger 进程中,关于服务注册过程请查看 Android 服务注册完整过程源码分析。
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android PackageManagerserviceAndroid 系统中的一个服务,它负责管理应用程序包。PackageManagerservice 提供了许多功能,包括安装、卸载、更新和管理应用程序的权限等。下面对其功能进行详细解释: 1. 安装应用程序:PackageManagerservice 能够将应用程序的 APK 文件安装到设备中。当用户从 Google Play 商店或其他渠道下载应用程序时,PackageManagerservice 将应用程序文件正确安装到手机的存储区域中。 2. 卸载应用程序:PackageManagerservice 可以卸载设备上的应用程序。当用户要卸载一个应用程序时,PackageManagerservice 会检查该应用程序的包名及其相关文件,并将其从设备中删除。 3. 更新应用程序:PackageManagerservice 能够更新已经安装在设备上的应用程序。当用户从应用商店下载一个已经安装的应用程序的更新时,PackageManagerservice 将下载的新版本进行安装,以替换旧版本。 4. 管理应用程序权限:PackageManagerservice 配合 Android 系统的权限系统,控制应用程序的权限。用户给予应用程序某些权限后,PackageManagerservice 会验证和授权应用程序的权限使用,确保应用程序的安全性和隐私保护。 除此之外,PackageManagerservice 还负责处理应用程序的签名验证、计算应用程序的版本号和版本名、管理应用程序的组件(如活动、服务等),以及处理应用程序之间的相互调用等。 总之,Android PackageManagerserviceAndroid 系统中的一个重要服务,负责管理应用程序的安装、卸载、更新和权限管理等功能。它的存在确保了 Android 应用生态的安全和稳定运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值