PackageManager是个实现类,具体的实现类是frameworks\base\core\java\android\app\ApplicationPackageManager.java (此类是hide类,通过引用无法关联到。)


这个文件定义ApplicationPackageManager类,继承并实现了PackageManager中接口;

ApplicationPackageManager使用mPM变量,这个变量是PackageManagerService的客户端(IBinder对象),调用mPM对象中的方法,实际调用到了frameworks\base\services\java\com\android\server\pm\PackageManagerService.java文件中

的方法。


1.ApplicationPackageManager构造

继续追溯,看看ServiceManager.getService("package"),PackageManagerService在哪里添加的呢?


在SystemServer里调用了PackageManagerService的main方法



2.getActivityInfo方法


其实调用的的是PackageManagerService的getActivityInfo方法


注意“mActivities.mActivities.get(component);”这里的mActivities重复写了一下,应该是网站的bug,实际代码应该是“mActivities.get(component);”


mActivities是在scanPackageDirtyLI这个方法里填充mActivities的


最终这个方法是通过 PackageManagerService的构造方法里调用。