- AMS是什么?
AMS管理著activity,Service, Provide, BroadcastReceiver
android10后:出現(xiàn)ATMS,ActivityTaskManagerService:ATMS是從AMS中抽出來,單獨管理著原來AMS中的Activity組件 。
現(xiàn)在我們對AMS的分析,也就包含對ATMS的分析了。
- AMS如何被別人管理?---被SystemServer的SystemServiceManager所管理
- AMS如何被人使用? ?---通過將自己的Binder對象公布給ServiceManager,供APP使用
- AMS如何啟動? ----通過SystemServer中的SystemServiceManager的startService進行啟動
這些涉及到SystemServer進程,專用門于管理AMS等各種服務的。
SystemServer.java->main():
startBootStrap();
//啟動atms.
-->atm = mSystemServiceManager.startService(ActivityTaskManagerService.LiftCycle.className).getService();
SystemServer->借助SystemServiceManager輔助類來管理90個多Services,所以不同的Services均需要封裝成統(tǒng)一的父類即SystemService,這樣一來方便讓SystemServiceManager對它們進行統(tǒng)一管理 。(具體細節(jié)可以查看安卓啟動流程關于SystemServer啟動運行部分)
?
AMS、ATMS是給Application使用的, 怎么給Application使用的。通過Binder給到Application使用,我們需要將這些ATMS\AMS等服務的Binder注冊進ServiceManager. Application要使用它們的時候,會去公共的ServiceManager中去查找對應的ATMS或AMS的binder,通過他們提供的Binder接口來使用這些服務的。為了完成這些服務,所以這些在SystemServer中的Service在進行類定義時必須將自己extends 成IBinder(Stub類),這樣他們才能把自己的服務公布到ServiceManager中。
然后SystemServiceManager如何管理這些Services呢?是通過SystemService這個類(即LifeCycle)中的統(tǒng)一的接口如start(), stop(),restart()等
去間接管理各類Service.
- 補充:關于類結(jié)構(gòu)設計啟發(fā):
如果需要讓一個類繼承多個父類時,java語言做不到,怎么辦?
解決辦法:可以在類里面創(chuàng)建一個內(nèi)部類(LiftCycle),內(nèi)部類去繼承需要的父類SystemService,在這個內(nèi)部類里面與我們的外部類(ATMS)結(jié)合來完成所有的功能。
- 下面聊聊AMS的職責:
以ATMS為例,ATMS的onStart()服務做了以下動作:
publishBinderService();//公布服務
mService.start();//調(diào)用atms服務的start接口。
-->atms在這個接口中只做一件事:
//將ATMS自已添加到LocalServices中,這個比較重要,除了讓別人使用ATMS這個服務之外,
//SystemServer進程自己有時也需要獲取使用這些服務,所以需要添加到LocalServices中。
LocalServices.addService();
上面的邏輯可以看出ATMS啟動的時候沒做什么事情。
- 下面看看AMS啟動:
ActivityManagerService.java->start():
mProcessCpuThread.start(); //cpu監(jiān)控線程
mBatteryStatsService.publish(); //注冊 電池狀態(tài)及權(quán)限管理
SystemServer在啟動完AMS后,會通過AMS啟動電池管理等各種處理,AMS要做的任務太多了
如下所示:
mAMS->initPowerManagement();
mAMS->setSystemProcess(); //為app進程安排后期的各種進程的監(jiān)控。
? -->注冊Activity至AMS內(nèi)的ServiceManager類中
? ? ?注冊服務的ProcStats,進程狀態(tài)
? ? ?注冊服務的meminfo,內(nèi)存信息
? ? ?注冊服務的gfxinfo,圖像信息
? ? ?注冊服務的dbinfo,數(shù)據(jù)庫信息
? ? ?注冊服務的cpuinfo,cpu信息
? ? ?注冊服務的processinfo,進程信息等,還有緩存,權(quán)限等
以上工作是為了后期可以通過adb命令去收集這些信息,adb去調(diào)用dump接口(),
把這些關鍵的信息收集起來。因此AMS要做非常多的事情,所以將ATMS(只管理Activity部分)剝離出去。文章來源:http://www.zghlxwxcb.cn/news/detail-693167.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-693167.html
到了這里,關于android framework之AMS的啟動管理與職責的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!