相關鏈接
Activity啟動流程:
1、應用通過startActivity或是startActivityForResult方法向ActivityManagerService發(fā)出啟動請求。
2、ActivityManagerService接收到啟動請求后會進行必要的初始化以及狀態(tài)的刷新,然后解析Activity的啟動模式,為啟動Activity做一系列的準備工作。
3、做完上述準備工作后,會去判斷棧頂是否為空,如果不為空即當前有Activity顯示在前臺,則會先進行棧頂Activity的onPause流程退出。
4、棧頂Activity執(zhí)行完onPause流程退出后開始啟動Activity。如果Activity被啟動過則直接執(zhí)行onRestart->onStart->onResume過程直接啟動Activity(熱啟動過程)。否則執(zhí)行Activity所在應用的冷啟動過程。
5、冷啟動過程首先會通過Zygote進程fork出一個新的進程,然后根據(jù)傳遞的”android.app.ActivityThread”字符串,反射出該對象并執(zhí)行ActivityThread的main方法進行主線程的初始化。
6、Activity所在應用的進程和主線程完成初始化之后開始啟動Activity,首先對Activity的ComponentName、ContextImpl、Activity以及Application對象進行了初始化并相互關聯(lián),然后設置Activity主題,最后執(zhí)行onCreate->onStart->onResume方法完成Activity的啟動。
7、上述流程都執(zhí)行完畢后,會去執(zhí)行棧頂Activity的onStop過程。