理解ActivityManagerService

一、AMS在Android7.0和Android8.0之后的差異

Android7.0之前的AMS家族

在Android7.0之前客戶端進程想和AMS進行通信都是通過ActivityManagerNative(以下簡稱AMN)getDefault()獲取的ActivityManagerProxy(以下簡稱AMP)來進行通訊的。

Android7.0 ActivityManagerService是AMN的一個子類,AMP是AMN的代理類,從而間接的實現(xiàn)通過AMP跨進程和AMS直接通訊。



Android8.0之后的AMS家族

在Android8.0之后,AMS家族中不再有AMP和AMN,取而代之的是IActivityManager。使用了AIDL進程間通信技術,服務端AMS繼承IActivityManager.Stub。

二、AMS的的啟動過程

通過之前的文章Android系統(tǒng)啟動過程,我們可以知道AMS的啟動在SystemServer進程初始化的時候啟動的。這里就從SystemServer的main函數(shù)開始逐步解析。



AMS屬于系統(tǒng)引導服務,所以會在上述startBoostrapServices()里進行初始化,我們繼續(xù)來看startBoostrapServices函數(shù)。



到這里我們可以清楚的看到,AMS會通過SystemServiceManager的實例調(diào)用startService方法初始化并啟動

三、AMS與應用程序進程

在之前的文章Android四大組件的工作過程,我們可以知道AMS在App啟動的過程中扮演了重要的角色,這里就不在過多的贅述??梢詤⒖贾暗奈恼?,AMS與應用程序的關聯(lián)主要有下面2點:

  • 啟動應用程序時AMS會檢查這個應用程序有沒有啟動,進程是否存在
  • 如果將要啟動的應用程序進程不存在,則請求Zygote進程去fork出一個應用進程出來
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容