我們簡(jiǎn)單的寫(xiě)一句如下代碼啟動(dòng)Activity
Intent intent = new Intent(this, LinearLayoutActivity.class);
startActivity(intent);
你是不是有很多疑問(wèn)?
- LinearLayoutActivity這個(gè)對(duì)象在哪里被new出來(lái)呢
- 它們兩個(gè)的生命周期是怎么進(jìn)行的呢
- 怎么樣推到前臺(tái)的呢
詳細(xì)源碼分析去看大佬的這篇博客:
https://blog.csdn.net/qq_35559358/article/details/75668416
學(xué)到的東西
1菜枷、startActivity內(nèi)部也是通過(guò)調(diào)用startActivityForResult來(lái)啟動(dòng)Activity征绎,只不過(guò)傳遞的requestCode小于0
2收毫、啟動(dòng)一個(gè)Activity是需要系統(tǒng)進(jìn)程(ActivityManagerService)和應(yīng)用進(jìn)程(ActivityThread)互相協(xié)助完成的
3、要啟動(dòng)的Activity看是否它所需的進(jìn)程是否存在,如果不存在則ActivityManagerService會(huì)通過(guò)socket與Zygote繼承通訊挽唉,并告知Zygote進(jìn)程fork出一個(gè)新的應(yīng)用程序進(jìn)程,然后執(zhí)行ActivityThread的main方法
4筷狼、進(jìn)程準(zhǔn)備好了瓶籽,startActivity后會(huì)通知ActivityManagerService做一些數(shù)據(jù)的保存初始化等處理,ActivityManagerService就會(huì)通知ActivityThread我準(zhǔn)備好了埂材,你開(kāi)始啟動(dòng)activity吧塑顺,然后你會(huì)發(fā)現(xiàn)在performLaunchActivity方法中通過(guò)反射生成了要跳轉(zhuǎn)的對(duì)象(回答了疑問(wèn)1)
5、ActivityThread每走完一個(gè)生命周期就會(huì)通知ActivityManagerService做些處理俏险,或者知道你現(xiàn)在走到那一步了严拒,我好協(xié)助。如走完了onResume竖独,ActivityManagerService就會(huì)把界面推到前臺(tái)裤唠,并且用戶(hù)可以操作。
6莹痢、如a啟動(dòng)b, a走onPause,然后b走onCreate onStart方种蘸,onResume方法嗤攻,然后a走onStop
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者