Android中AMS(ActivityManagerService)权悟、WMS(WindowManagerService)缰揪、PMS(PackageManagerService)中的詳解

Android 系統(tǒng)中比較重要的系統(tǒng)服務ActivityManagerService(AMS)和 WindowManagerService(WMS)陨享,PackageManagerService(PMS)葱淳。

定義

AMS:ActivityManagerService 負責管理Activity的生命周期的钝腺,AMS還借助ActivityStack是來把所有的Activity按照后進先出的順序放在一個堆棧中。在Android系統(tǒng)中只有一個AMS的實例赞厕,他負責管理系統(tǒng)中所有的Activity艳狐,管理、調度這些Activity的生命周期皿桑。在Android系統(tǒng)系統(tǒng)的過程中毫目,在SystemServer進程中把AMS服務啟動起來,注冊到ServiceManager中诲侮。
————————————————
WMS:WindowManagerService 負責管理系統(tǒng)中所有的窗口镀虐,包括Activity的窗口、壁紙窗口沟绪、輸入法窗口刮便、彈窗子窗口等,即管理屏幕上展示上的一切窗口绽慈。在Android系統(tǒng)系統(tǒng)的過程中恨旱,在SystemServer進程中也把WMS服務啟動起來,注冊到ServiceManager中坝疼。
————————————————
PMS:管理著所有跟 package 相關的工作搜贤,常見的比如安裝、卸載應用钝凶。
————————————————
先看一張圖-AMS和WMS涉及的類:


image.png

詳解AMS:

image.png

1).ActivityManagerServices仪芒,簡稱 AMS,服務端對象,負責系統(tǒng)中所有 Activity 的生命周期掂名。 2).ActivityThread夭咬,App 的真正入口。當開啟 App 之后铆隘,調用 main()開始運行卓舵, 開啟消息循環(huán)隊列,這就是傳說的 UI 線程或者叫主線程膀钠。與 ActivityManagerService 一起完成 Activity 的管理工作掏湾。
3).ApplicationThread,用來實現(xiàn) ActivityManagerServie 與 ActivityThread 之間的 交互肿嘲。在 ActivityManagerSevice 需要管理相關 Application 中的 Activity 的生命 周期時融击,通過 ApplicationThread 的代理對象與 ActivityThread 通信。
4).ApplicationThreadProxy雳窟,是 ApplicationThread 在服務器端的代理尊浪,負責和客 戶端的 ApplicationThread 通信。AMS 就是通過該代理與 ActivityThread 進行通 信的封救。 5).Instrumentation拇涤,每一個應用程序只有一個 Instrumetation 對象,每個 Activity 內都有一個對該對象的引用誉结,Instrumentation 可以理解為應用進程的管家鹅士, ActivityThread 要創(chuàng)建或暫停某個 Activity 時,都需要通過 Instrumentation 來進 行具體的操作惩坑。
6).ActivityStack掉盅,Activity 在 AMS 的棧管理,用來記錄經啟動的 Activity 的先后 關系以舒,狀態(tài)信息等趾痘。通過 ActivtyStack 決定是否需要啟動新的進程。
7).ActivityRecord蔓钟,ActivityStack 的管理對象永票,每個 Acivity 在 AMS 對應一個 ActivityRecord,來記錄 Activity 狀態(tài)以及其他的管理信息奋刽。其實就是服務器端的 Activit 對象的映像瓦侮。 8).TaskRecord,AMS 抽象出來的一個“任務”的概念佣谐,是記錄 ActivityRecord 的棧肚吏, 一個“Task”包含若干個 ActivityRecord。AMS 用 TaskRecord 確保 Activity 啟動和 退出的順序狭魂。如果你清楚 Activity 的 4 種 launchMode罚攀,那么對這概念應該不陌 生党觅。
[圖片上傳中...(image.png-c635d9-1619582584474-0)]

詳解WMS

1).WindowManagerService 負責管理系統(tǒng)中所有的窗口,包括Activity的窗口斋泄、壁紙窗口杯瞻、輸入法窗口、彈窗子窗口等炫掐,即管理屏幕上展示上的一切窗口魁莉。在Android系統(tǒng)系統(tǒng)的過程中,在SystemServer進程中也把WMS服務啟動起來募胃,注冊到ServiceManager中旗唁。
2).Session 官方解釋 This class represents an active client session. There is generally one Session object per process that is interacting with the window manager。應用程序進程通過Session對象與WMS進行通信痹束,每個應用程序進程中有一個Session對象检疫。
3).WindowState 官方解釋 A window in the window manager。在WMS中描述一個Window祷嘶。
4).WindowToken 官方解釋 Container of a set of related windows in the window manager. Often this is an AppWindowToken, which is the handle for an Activity that it uses to display windows. For nested windows, there is a WindowToken created for the parent window to manage its children.用來描述WMS中一個Window的信息屎媳。
5).AppWindowToken 官方解釋 Version of WindowToken that is specifically for a particular application (or really activity) that is displaying windows.用來描述一個Activity在WMS中對應的Window的信息。
6).SurfaceSession 官方解釋 An instance of this class represents a connection to the surface flinger, from which you can create one or more Surface instances that will be composited to the screen.通過該對象能與SurfaceFlinger服務通信论巍,來創(chuàng)建一個Surface.
————————————————

詳解PMS

APK 的安裝流程如下所示:


image.png

1).復制 APK 到/data/app 目錄下烛谊,解壓并掃描安裝包。
2).資源管理器解析 APK 里的資源文件环壤。
3).解析 AndroidManifest 文件晒来,并在/data/data/目錄下創(chuàng)建對應的應用數(shù)據(jù)目錄。
4).然后對 dex 文件進行優(yōu)化郑现,并保存在 dalvik-cache 目錄下。
5).將 AndroidManifest 文件解析出的四大組件信息注冊到 PackageManagerService 中荧降。
6).安裝完成后接箫,發(fā)送廣播。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末朵诫,一起剝皮案震驚了整個濱河市辛友,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌剪返,老刑警劉巖废累,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異脱盲,居然都是意外死亡恰力,警方通過查閱死者的電腦和手機诊霹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事衅疙。” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵毅待,是天一觀的道長。 經常有香客問我归榕,道長尸红,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任刹泄,我火速辦了婚禮驶乾,結果婚禮上,老公的妹妹穿的比我還像新娘循签。我一直安慰自己级乐,他們只是感情好,可當我...
    茶點故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布县匠。 她就那樣靜靜地躺著风科,像睡著了一般。 火紅的嫁衣襯著肌膚如雪乞旦。 梳的紋絲不亂的頭發(fā)上贼穆,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天,我揣著相機與錄音兰粉,去河邊找鬼故痊。 笑死,一個胖子當著我的面吹牛玖姑,可吹牛的內容都是我干的愕秫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼焰络,長吁一口氣:“原來是場噩夢啊……” “哼戴甩!你這毒婦竟也來了?” 一聲冷哼從身側響起闪彼,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤甜孤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后畏腕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缴川,經...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年描馅,在試婚紗的時候發(fā)現(xiàn)自己被綠了把夸。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡流昏,死狀恐怖扎即,靈堂內的尸體忽然破棺而出吞获,到底是詐尸還是另有隱情,我是刑警寧澤谚鄙,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布各拷,位于F島的核電站,受9級特大地震影響闷营,放射性物質發(fā)生泄漏烤黍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一傻盟、第九天 我趴在偏房一處隱蔽的房頂上張望速蕊。 院中可真熱鬧,春花似錦娘赴、人聲如沸规哲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽唉锌。三九已至,卻和暖如春竿奏,著一層夾襖步出監(jiān)牢的瞬間袄简,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工泛啸, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绿语,地道東北人。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓候址,卻偏偏與公主長得像吕粹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子宗雇,可洞房花燭夜當晚...
    茶點故事閱讀 44,974評論 2 355