Activity啟動(dòng)流程
ActivityThread
一個(gè)應(yīng)用對(duì)應(yīng)一個(gè)ActivityThread,當(dāng)Zygote進(jìn)程孵化出一個(gè)新的進(jìn)程時(shí)烫扼,會(huì)執(zhí)行Activity的main函數(shù)哀澈。activityThread.attach()函數(shù)中主任務(wù)是將ApplicationThread綁定到ActivityManagerService中牌借。
Activity生命周期處理,每個(gè)應(yīng)用啟動(dòng)后會(huì)在主線程中(ActivityThread.main)調(diào)用Looper.prepareMainLooper()獲取單例sMainLooper以及內(nèi)部的消息隊(duì)列割按,并將消息隊(duì)列的quitAllowed屬性設(shè)置成false膨报,經(jīng)過(guò)復(fù)雜的啟動(dòng)邏輯后最終調(diào)用Looper.looper()等待消息的到來(lái),LifecycleManger就是通過(guò)調(diào)用各種生命周期類(lèi)向主線程發(fā)生message通知主線程(activityThread)處理生命周期函數(shù)适荣,例如LaunchActivityItem现柠、ResumeActivityItem、DestroyActivityItem等弛矛,其調(diào)用是通過(guò)持有ApplicationThread對(duì)象的ClientTransaction對(duì)象進(jìn)行事件的傳遞够吩,其中ApplicationThread是ActivityThread的內(nèi)部類(lèi),可以直接調(diào)用activityThread的內(nèi)部函數(shù)丈氓。