PackageManager源码分析

在android 4.4源码上进行的分析。

一、PackageManager如何产生的?

我们平时在代码中使用的context.getPackageManager()

那么这个PackageManager是怎样一步一步生成的呢?

context.getPackageManager()->ContextImpl.getPackageManager()

通过查看ContextImpl源码发现返回的是ApplicationPackageManager的对象,

ApplicationPackageManager 是继承 抽象类PackageManager

ApplicationPackageManager只是一个装饰类,真正的实现类是通过ActivityThread.getPackageManager()来获取的

看看ActivityThread源码(这里说一句,我们app的启动入口也在ActivityThread里面)

真正的实现类是通过ServiceManager返回的binder对象而来,

这个实现接口的类就是PackageManagerService

 

二、PackageManagerService如何工作的?

PackageManagerService是如何创建的呢?

SystemServer.main() -> initAndLoop()

创建后做了啥?

1.首先 扫描安装“system/framework”目录下的jar包

2.扫描 安装系统system/app的应用程序

3.制造商的目录下/vendor/app应用包

4.扫描“data/app”目录,即用户安装的第三方应用

5.扫描" data/app-private"目录,即安装DRM保护的APK文件(一个受保护的歌曲或受保 护的视频是使用 DRM 保护的文件)

 

1. 从apk, xml中载入pacakge信息, 存储到内部成员变量中, 用于后面的查找. 关键的方法是scanPackageLI().
2. 各种查询操作, 包括query Intent操作.
3. install package和delete package的操作. 还有后面的关键方法是installPackageLI(). 

4. 广播通知

 

未完待续

转载于:https://www.cnblogs.com/lzl-sml/p/5320222.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值