看startActivity源碼學到的東西

我們簡單的寫一句如下代碼啓動Activity

    Intent intent = new Intent(this, LinearLayoutActivity.class);
    startActivity(intent);

你是不是有很多疑問?

  1. LinearLayoutActivity這個對象在哪裏被new出來呢
  2. 它們兩個的生命週期是怎麼進行的呢
  3. 怎麼樣推到前臺的呢

詳細源碼分析去看大佬的這篇博客:
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章