準(zhǔn)備
1径荔、三個進(jìn)程
1葛作、 Launcher進(jìn)程:整個App啟動流程的起點,負(fù)責(zé)接收用戶點擊屏幕事件猖凛,它其實就是一個Activity,里面實現(xiàn)了點擊事件绪穆,長按事件辨泳,觸摸等事件,可以這么理解玖院,把Launcher想象成一個總的Activity菠红,屏幕上各種App的Icon就是這個Activity的button,當(dāng)點擊Icon時难菌,會從Launcher跳轉(zhuǎn)到其他頁面试溯。
2、 SystemServer進(jìn)程:這個進(jìn)程在整個的Android進(jìn)程中是非常重要的一個郊酒,地位和Zygote等同遇绞,它是屬于Application Framework層的,Android中的所有服務(wù)燎窘,例如AMS, WindowsManager, PackageManagerService等等都是由這個SystemServer fork出來的摹闽。
3、App進(jìn)程:你要啟動的App所運行的進(jìn)程褐健。
2. 六個大類
1付鹿、ActivityManagerService:(AMS)AMS是Android中最核心的服務(wù)之一,主要負(fù)責(zé)系統(tǒng)中四大組件的啟動蚜迅、切換舵匾、調(diào)度及應(yīng)用進(jìn)程的管理和調(diào)度等工作,其職責(zé)與操作系統(tǒng)中的進(jìn)程管理和調(diào)度模塊相類似谁不,因此它在Android中非常重要坐梯,它本身也是一個Binder的實現(xiàn)類。
2刹帕、 Instrumentation:監(jiān)控應(yīng)用程序和系統(tǒng)的交互烛缔。
3、ActivityThread:應(yīng)用的入口類轩拨,通過調(diào)用main方法践瓷,開啟消息循環(huán)隊列。ActivityThread所在的線程被稱為主線程亡蓉。
4晕翠、ApplicationThread:ApplicationThread提供Binder通訊接口,AMS則通過代理調(diào)用此App進(jìn)程的本地方法。
5淋肾、ActivityManagerProxy:AMS服務(wù)在當(dāng)前進(jìn)程的代理類硫麻,負(fù)責(zé)與AMS通信。
6樊卓、ApplicationThreadProxy:ApplicationThread在AMS服務(wù)中的代理類拿愧,負(fù)責(zé)與ApplicationThread通信。
可以說碌尔,APP啟動的流程就是通過這六個大類在這三個進(jìn)程之間不斷通信的過程浇辜。
啟動流程
1、Launcher響應(yīng)用戶點擊唾戚,通知AMS柳洋。
啟動的起點發(fā)生在Launcher活動中,啟動一個app說簡單點就是啟動一個Activity叹坦,那么我們說過所有組件的啟動熊镣,切換,調(diào)度都由AMS來負(fù)責(zé)的募书,所以第一步就是Launcher響應(yīng)了用戶的點擊事件绪囱,然后通知AMS。
2莹捡、AMS響應(yīng)Launcher進(jìn)程請求
AMS得到Launcher的通知毕箍,就需要響應(yīng)這個通知,主要就是新建一個Task去準(zhǔn)備啟動Activity道盏,并且告訴Launcher你可以休息了(Paused)而柑。
3、Launcher進(jìn)程掛起Launcher荷逞,再次通知AMS
Launcher得到AMS讓自己“休息”的消息媒咳,那么就直接掛起,并告訴AMS我已經(jīng)Paused了种远。
4涩澡、AMS創(chuàng)建新的進(jìn)程
AMS知道了Launcher已經(jīng)掛起之后,就可以放心的為新的Activity準(zhǔn)備啟動工作了坠敷,首先妙同,APP肯定需要一個新的進(jìn)程去進(jìn)行運行,所以需要創(chuàng)建一個新進(jìn)程膝迎,這個過程是需要Zygote參與的粥帚,AMS通過Socket去和Zygote協(xié)商,如果需要創(chuàng)建進(jìn)程限次,那么就會fork自身芒涡,創(chuàng)建一個線程柴灯,新的進(jìn)程會導(dǎo)入ActivityThread類,這就是每一個應(yīng)用程序都有一個ActivityThread與之對應(yīng)的原因费尽。
5赠群、應(yīng)用進(jìn)程初始化
進(jìn)程創(chuàng)建好了,通過調(diào)用上述的ActivityThread的main方法旱幼,這是應(yīng)用程序的入口查描,在這里開啟消息循環(huán)隊列,這也是主線程默認(rèn)綁定Looper的原因柏卤。
6冬三、在AMS中注冊應(yīng)用進(jìn)程,啟動啟動棧頂頁面
這時候闷旧,App還沒有啟動完,要永遠(yuǎn)記住钧唐,四大組建的啟動都需要AMS去啟動忙灼,將上述的應(yīng)用進(jìn)程信息注冊到AMS中,AMS再在堆棧頂部取得要啟動的Activity钝侠,通過一系列鏈?zhǔn)秸{(diào)用去完成App啟動该园。