PackageManager源碼分析

在android 4.4源碼上進行的分析。android

1、PackageManager如何產生的?app

咱們平時在代碼中使用的context.getPackageManager()oop

那麼這個PackageManager是怎樣一步一步生成的呢?spa

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

經過查看ContextImpl源碼發現返回的是ApplicationPackageManager的對象,xml

ApplicationPackageManager 是繼承 抽象類PackageManager對象

ApplicationPackageManager只是一個裝飾類,真正的實現類是經過ActivityThread.getPackageManager()來獲取的blog

看看ActivityThread源碼(這裏說一句,咱們app的啓動入口也在ActivityThread裏面)繼承

真正的實現類是經過ServiceManager返回的binder對象而來,接口

這個實現接口的類就是PackageManagerService

 

2、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. 廣播通知

 

未完待續

相關文章
相關標籤/搜索