Android 原始碼閱讀筆記

2021-09-08 11:25:55 字數 1573 閱讀 8156

zygote:

1、zygote 是系統啟動之後建立的第二個程序

2、zygote 建立zygote socket、虛擬機器

3、zygote 在虛擬機器中通過forksystemserver, 建立server程序, 並且在其中啟動服務(ams、pms等)

4、zygote 在虛擬機器中註冊zygote套接字,迴圈監聽ams的請求,建立新的程序

server: (ps:版本不同,建立服務的方法也有很大不同,以下為5.1.1版本)

1、zygote fork自己,為server建立新的子程序之後,呼叫handlesystemserverprocess 來啟動服務

2、handlesystemserverprocess 方法接著呼叫了 invokestaticmain方法啟動了systemserver的main方法

3、在main方法中,呼叫 systemserver 的run方法

4、其中的 startbootstrapservices 、 startcoreservices 、startotherservices 分別用來啟動不同的服務(ams、pms、wms、cs等)

應用程式程序的建立:

binder執行緒池的啟動:

訊息迴圈的建立:

1、程序建立成功之後,會使用invokestaticmain方法呼叫activitythread的main方法

2、通過丟擲異常methodandargscaller,在zygoteinit.main方法的異常捕獲中執行反射呼叫main方法

小結:

1、zygote是乙個程序,它有自己的虛擬機器

2、ams、wms、pms等在乙個程序,執行在虛擬機器中,由zygote建立

3、zygote 用來接收ams的指令,建立新的程序

4、通過指令碼啟動init程序

5、init程序中fork出乙個子程序zygote

6、在zygote程序中建立虛擬機器

7、在zygote的虛擬機器中建立建立服務程序(zygote.forksystemserver--》zygote.nativeforksystemserver)

8、在服務程序中啟動服務:zygoteinit.handlesystemserverprocess-->runtimeinit.zygoteinit方法啟動binder執行緒池(啟動systemserver.main、啟動ams、wms等)

9、在zygote虛擬機器中啟動迴圈監聽本地zygote套接字

10、zygote程序,接收到建立程序的命令,通過zygote.forkandspecialize-->zygote.nativeforkandspecialize建立程序;建立之後通過zygoteconnection.handlechildproc--》runtimeinit.zygoteinit(建立binder執行緒池、呼叫activitythread.main)

11、runtimeinit.zygoteinit會根據傳入的引數不同,啟動不同的類的main方法,來實現不同的功能,相同點是它都會建立乙個binder執行緒池, 所以不管是服務程序還是應用程式程序都包含有binder執行緒池,都可以通過binder進行程序間通訊。

閱讀筆記 fsnotify原始碼閱讀

fsnotify的github位址是 fsnotify是乙個資料夾監控應用。可以使用建立乙個watcher來對某個資料夾進行監控 檔案目錄很簡單,實際就兩個程式檔案,fsnotify.go 和 各平台的fsnotify go 後乙個檔案是各個不同平台的實現 example test.go中給的是最簡...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

閱讀Android原始碼 MAC系統

windows有 source insight,我們mac沒有,也不能抓瞎啊,android studio最熟悉,就用它吧。我的本地原始碼路徑 zhuxiujun android8.0 zhuxiujun pwd users zhuxiujun aosp android8.0 1 構建android...