(基于android7.0)
根Activity啟動(dòng)(Launcher啟動(dòng))大致分為三個(gè)部分:
- Launcher->AMS
- AMS->ApplicationThread
- ActivityThread->Activity
Launcher->AMS
- Launcher.startActivitySafely()
- 內(nèi)部添加了flag梗肝,new_task乏盐,然后調(diào)用startActivity()->startActivityForResult()
- 內(nèi)部調(diào)用了Instrumentation.execStartActivity()缔御,接著調(diào)用了ActivityTaskManager.getService().startActivity()
- 這個(gè)ActivityTaskManager.getService()是IActivityTaskManager懂算,是AMS的Binder代理對(duì)象。
- 此時(shí)已經(jīng)進(jìn)入AMS的流程嗡髓。
AMS->ApplicationThread
具體涉及:AMS->ActivityStarter->ActivityStackSupervisor->ActivityStack->ActivityStackSupervisor->ApplicationThread。
- AMS的startActivity()->startActivityAsUser(),此時(shí)拿到UserId赃份。
接著調(diào)用ActivityStarter的startActivityMayWait()->startActivityLocked()->startActivityUnChecked(),這里創(chuàng)建了新的TaskRecord奢米,用來(lái)描述一個(gè)Activity的任務(wù)棧抓韩,即創(chuàng)建了新的任務(wù)棧。內(nèi)部還創(chuàng)建ActivityRecord鬓长,封裝了Activity的參數(shù)谒拴,如intent涉波。 - 接著調(diào)用ActivityStackSupervisor的resumeFocusedStackTopActivityLocked()
- 該方法內(nèi)部調(diào)用了ActivityStack的resumeTopActivityUnCheckedLocked()->resumeTopActivityInnerLocked()
- 然后調(diào)用了ActivitySupervisor的startSpecificActivityLocked()英上,內(nèi)部判斷app進(jìn)程是否存在,存在則調(diào)用realStartActivityLocked()怠蹂,不存在則調(diào)用AMS的startProcessLocked()善延,通知Zygote進(jìn)程開(kāi)啟app進(jìn)程。
- 在realStartActivityLocked()中調(diào)用了app.thread.scheduleLaunchActivity()城侧,此時(shí)app.thread即為ApplicationThread易遣。
ApplicationThread->Activity
具體涉及:ApplicationThread->ActivityThread->H->Instrumentation->Activity
- 在ApplicationThread的scheduleLaunchActivity()中,創(chuàng)建了ActivityClientRecord嫌佑,用于封裝Activity的參數(shù)豆茫,然后向H發(fā)送LAUNCH_ACTIVITY消息。
- H是主線程的Handler消息管理類屋摇,由于ApplicationThread是Binder揩魂,運(yùn)行在Binder線程中,這里使用H來(lái)切換線程到主線程中炮温。收到消息后執(zhí)行了handleLaunchActivity()火脉。
- 內(nèi)部調(diào)用了performLaunchActivity(),handleResumeActivity()柒啤。
- 關(guān)鍵點(diǎn)performLaunchActivity()倦挂,內(nèi)部創(chuàng)建了ContextImpl、使用ClassLoader創(chuàng)建了Activity担巩、初始化Activity(調(diào)用activity的attach方法)方援,然后調(diào)用了Instrumentation的callActivityOnCreate()->Activity的performCreate(),內(nèi)部會(huì)走到Activity的OnCreate()涛癌。