以下幾篇文章是較深入分析binder機制。
目錄
1. Android - Binder機制 - ServiceManager
2. Android - Binder機制 - 普通service註冊
3. Android - Binder機制 - 獲得普通service
4. Android - Binder機制 - client和普通service互動
5. Android - Binder機制 - Binder架構總結
6. Android - Binder機制 - ProcessState和IPCThreadState
7. Android - Binder機制 - 驅動
Android - Binder機制 - Binder架構總結
UML
說明
1. 以中間的IXXX的垂直線為準,左邊是用戶端進程,它們的命名類似Bp***,右邊是服務端進程,它們的命名類似Bn***;
2. 以中間的一條水平虛線為界線,上邊執行的是具體業務,如我們之前講到的AddServcie、GetService、StartPreview等,它們都是普通業務,下邊執行的是資料互動,就是講上邊的業務資料打包成binder定義的資料包結構,然後通過binder驅動發送出去或者接收;
3. 第一篇的ServiceManager不是按照Bn***類構建的,但是只是我用的版本不是這樣構建的,ServiceManager也完全可以用Bn***來構建,用Bp***和Bn***來構建,讓程式員在看代碼時更加輕鬆,代碼結構也更加簡潔,所以,基本上都是通過Bp***和Bn***來完成的;
4. Bn***和Bp***都繼承了兩個基類,一個是IXXX,一個是BBinder(或者BpRefBase),其實也正說明了BpXXX和BnXXX既要完成業務層的任務,也要執行資料轉送相應的任務;
5. IPCThreadState是真正和驅動打交道的角色,一個進程可以有幾個;
6. ProcessState的任務很簡單,一是開啟binder裝置供IPCThreadState使用,一個是獲得ServiceManager;
7. 用戶端至少持有兩個服務端,一個是ServiceManager,一個是它的商務服務端XXXService;
通過這個圖,你是不是對複雜的binder找到了很多的規律了;