日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android pms架构图,Android PMS之启动流程

發(fā)布時(shí)間:2023/12/20 Android 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android pms架构图,Android PMS之启动流程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、PMS整體的結(jié)構(gòu)圖

PMS是通過Binder機(jī)制進(jìn)行與客戶端的通信,其中:

Binder服務(wù)端:即系統(tǒng)服務(wù)PackageManagerService extends IPackageManager.Stub

Binder客戶端:即我們應(yīng)用層經(jīng)常使用的PackageManager,但實(shí)際上PackageManager是一個(gè)抽象類,所以實(shí)際使用的ApplicationPackageManager

二、PMS的簡(jiǎn)單啟動(dòng)流程

1、PMS是核心系統(tǒng)服務(wù),所以一定是在SystemServer中啟動(dòng)的

在SystemServer的main()方法->run()方法中會(huì)啟動(dòng)一些系統(tǒng)服務(wù),其中包括PMS。PMS是在startBootstrapServices方法中進(jìn)行啟動(dòng)的,這里是優(yōu)先啟動(dòng)一些比較重要的系統(tǒng)服務(wù),包括PMS、AMS等

private void run() {

·····

// Start services.

try {

t.traceBegin("StartServices");

startBootstrapServices(t);

startCoreServices(t);

startOtherServices(t);

} catch (Throwable ex) {

Slog.e("System", "******************************************");

Slog.e("System", "************ Failure starting system services", ex);

throw ex;

} finally {

t.traceEnd(); // StartServices

}

·········

}

在startBootstrapServices方法中調(diào)用PMS的main方法

private void startBootstrapServices(@NonNull TimingsTraceAndSlog t) {

`````

t.traceBegin("StartPackageManagerService");

try {

Watchdog.getInstance().pauseWatchingCurrentThread("packagemanagermain");

mPackageManagerService = PackageManagerService.main(mSystemContext, installer,

mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);

} finally {

Watchdog.getInstance().resumeWatchingCurrentThread("packagemanagermain");

}

// Now that the package manager has started, register the dex load reporter to capture any

// dex files loaded by system server.

// These dex files will be optimized by the BackgroundDexOptService.

SystemServerDexLoadReporter.configureSystemServerDexReporter(mPackageManagerService);

mFirstBoot = mPackageManagerService.isFirstBoot();

mPackageManager = mSystemContext.getPackageManager();

t.traceEnd();

``````

}

2、PackageManagerService的main方法

main()方法主要檢查一些屬性,然后執(zhí)行PackageManagerService的構(gòu)造函數(shù)進(jìn)行初始化。最后在ServiceManager進(jìn)行注冊(cè)”package”和”package_native”

public static PackageManagerService main(Context context, Installer installer,

boolean factoryTest, boolean onlyCore) {

// Self-check for initial settings.

PackageManagerServiceCompilerMapping.checkProperties();

``````

PackageManagerService m = new PackageManagerService(injector, onlyCore, factoryTest);

m.installWhitelistedSystemPackages();

ServiceManager.addService("package", m);

final PackageManagerNative pmn = m.new PackageManagerNative();

ServiceManager.addService("package_native", pmn);

return m;

}

3、PackageManagerService的構(gòu)造函數(shù)

PackageManagerService構(gòu)造函數(shù)做了pms啟動(dòng)的主要事情。

主要包含以下五個(gè)階段

階段1:BOOT_PROGRESS_PMS_START

階段2:BOOT_PROGRESS_PMS_SYSTEM_SCAN_START

階段3:BOOT_PROGRESS_PMS_DATA_SCAN_START

階段4:BOOT_PROGRESS_PMS_SCAN_END

階段5:BOOT_PROGRESS_PMS_READY

階段1:BOOT_PROGRESS_PMS_START

主要工作:

(1)構(gòu)造 DisplayMetrics ,保存分辨率等相關(guān)信息;

(2)創(chuàng)建Installer對(duì)象,與installd交互;

(3)創(chuàng)建mPermissionManager對(duì)象,進(jìn)行權(quán)限管理;

(4)構(gòu)造Settings類,保存安裝包信息,清除路徑不存在的孤立應(yīng)用,主要涉及/data/system/目錄的packages.xml,packages-backup.xml,packages.list,packages-stopped.xml,packages-stopped-backup.xml等文件。

(5)構(gòu)造PackageDexOptimizer及DexManager類,處理dex優(yōu)化;

(6)創(chuàng)建SystemConfig實(shí)例,獲取系統(tǒng)配置信息,配置共享lib庫(kù);

(7)創(chuàng)建PackageManager的handler線程,循環(huán)處理外部安裝相關(guān)消息。

階段2:BOOT_PROGRESS_PMS_SYSTEM_SCAN_START

主要工作:

(1)從init.rc中獲取環(huán)境變量BOOTCLASSPATH和SYSTEMSERVERCLASSPATH;

(2)對(duì)于舊版本升級(jí)的情況,將安裝時(shí)獲取權(quán)限變更為運(yùn)行時(shí)申請(qǐng)權(quán)限;

(3)掃描system/vendor/product/odm/oem等目錄的priv-app、app、overlay包;

(4)清除安裝時(shí)臨時(shí)文件以及其他不必要的信息。

階段3:BOOT_PROGRESS_PMS_DATA_SCAN_START

主要工作:

(1)處理data目錄的應(yīng)用信息,及時(shí)更新,祛除不必要的數(shù)據(jù)。

階段4:BOOT_PROGRESS_PMS_SCAN_END

主要工作:

(1)sdk版本變更,更新權(quán)限;

(2)OTA升級(jí)后首次啟動(dòng),清除不必要的緩存數(shù)據(jù);

(3)權(quán)限等默認(rèn)項(xiàng)更新完后,清理相關(guān)數(shù)據(jù);

(4)更新package.xml

階段5:BOOT_PROGRESS_PMS_READY

主要工作:

(1)創(chuàng)建PackageInstallerService對(duì)象

(2)GC回收內(nèi)存

標(biāo)簽:PackageManagerService,PMS,流程,package,BOOT,PROGRESS,Android,main

來源: https://blog.csdn.net/kh896424665/article/details/111601078

總結(jié)

以上是生活随笔為你收集整理的android pms架构图,Android PMS之启动流程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。