本篇文章主要談一談PKMS調(diào)用方式。
PKMS概述
PKMS指PackageManagerService服務(wù)本身以及PackageManagerService服務(wù)運作時使用到的各種其他系統(tǒng)服務(wù);是Android系統(tǒng)中的核心服務(wù)之一,負責應(yīng)用程序的安裝、卸載以及信息查詢等工作;
PKMS調(diào)用方式
客戶端可通過Context.getPackageManager()獲得ApplicationPackageManager對象, 而mPM指向的是Proxy代理,當調(diào)用到mPM.方法后,將會調(diào)用到IPackageManager的Proxy代理方法,然后通過Binder機制中的mRemote與服務(wù)端PackageManagerService通信,并調(diào)用到PackageManagerService的方法。

Binder服務(wù)端:PackageManagerService繼承于IPackageManager.Stub;
Binder客戶端:ApplicationPackageManager(簡稱APM)的成員變量mPM繼承于IPackageManager.Stub.Proxy; 本身APM是繼承于PackageManager對象。
簡單的調(diào)用如下:
/**
* 得到應(yīng)用層序的版本名稱
*
* @return
*/
private String getVersionName() {
PackageManager packageManager = getPackageManager();
try {
// 得到apk的功能清單文件:為了防止出錯直接使用getPackageName()方法獲得包名
// packageManager.getPackageInfo("com.xxx.xxx", 0);
PackageInfo packageInfo = packageManager.getPackageInfo(getPackageName(), 0);
//返回版本名稱
return packageInfo.versionName;
} catch (NameNotFoundException e) {
e.printStackTrace();
return "";
}
}
最后
如果想要成為架構(gòu)師或想突破20~30K薪資范疇,那就不要局限在編碼,業(yè)務(wù),要會選型、擴展,提升編程思維。此外,良好的職業(yè)規(guī)劃也很重要,學習的習慣很重要,但是最重要的還是要能持之以恒,任何不能堅持落實的計劃都是空談。
如果你沒有方向,這里給大家分享一套由阿里高級架構(gòu)師編寫的《Android八大模塊進階筆記》,幫大家將雜亂、零散、碎片化的知識進行體系化的整理,讓大家系統(tǒng)而高效地掌握Android開發(fā)的各個知識點。

相對于我們平時看的碎片化內(nèi)容,這份筆記的知識點更系統(tǒng)化,更容易理解和記憶,是嚴格按照知識體系編排的。
全套視頻資料:
一、面試合集

二、源碼解析合集

三、開源框架合集
