我們簡單的寫一句如下代碼啓動Activity
Intent intent = new Intent(this, LinearLayoutActivity.class);
startActivity(intent);
你是不是有很多疑問?
- LinearLayoutActivity這個對象在哪裏被new出來呢
- 它們兩個的生命週期是怎麼進行的呢
- 怎麼樣推到前臺的呢
詳細源碼分析去看大佬的這篇博客:
https://blog.csdn.net/qq_35559358/article/details/75668416
學到的東西
1、startActivity內部也是通過調用startActivityForResult來啓動Activity,只不過傳遞的requestCode小於0
2、啓動一個Activity是需要系統進程(ActivityManagerService)和應用進程(ActivityThread)互相協助完成的
3、要啓動的Activity看是否它所需的進程是否存在,如果不存在則ActivityManagerService會通過socket與Zygote繼承通訊,並告知Zygote進程fork出一個新的應用程序進程,然後執行ActivityThread的main方法
4、進程準備好了,startActivity後會通知ActivityManagerService做一些數據的保存初始化等處理,ActivityManagerService就會通知ActivityThread我準備好了,你開始啓動activity吧,然後你會發現在performLaunchActivity方法中通過反射生成了要跳轉的對象(回答了疑問1)
5、ActivityThread每走完一個生命週期就會通知ActivityManagerService做些處理,或者知道你現在走到那一步了,我好協助。如走完了onResume,ActivityManagerService就會把界面推到前臺,並且用戶可以操作。
6、如a啓動b, a走onPause,然後b走onCreate onStart方,onResume方法,然後a走onStop