天天看點

Android應用生死輪回的那些事兒(2) - PackageManagerAndroid應用生死輪回的那些事兒(2) - PackageManager

如我們上節所講,在android中,為應用包的安裝,删除各種操作服務的,是packagemanagerserivce,簡稱pms.

如果想要調用pms的服務,則可以通過context去調用getpackagemanager方法。

這個定義于context.java中:

我們先來看一張圖,了解packagemanager與pms的關系:

Android應用生死輪回的那些事兒(2) - PackageManagerAndroid應用生死輪回的那些事兒(2) - PackageManager

我們下面先以packagemanager中所提供的getapplicationinfo方法為例,看看它是如何被實作的。

packagename:包名

flags:支援下面的标志:

支援的标志如下:

get_shared_library_files:擷取so庫的安裝路徑,然後可以通過applicationinfo的sharedlibraryfiles屬性來讀取相關資訊。

match_system_only:隻包括帶有系統屬性的

match_uninstalled_packages:即使是應用被uninstall了,但隻要保留了資料,也可以被搜出來。

applicationpackagemanager繼承了抽象類packagemanager.

applicationpackagemanager是在contextimpl中被new出來的:

applicationpackagemanager中的第二個參數pm是溝通pms的橋梁。

我們來看activitythread中getpackagemanager的實作:

在applicationpackagemanager類中,其實還是對pms的對應功能的封裝。

真正的實作還是要看pms:

繼續閱讀