Binder是為了解決跨進程通信。
關于Binder的文章實在是太多了,每篇文章都能從Java層講到C++層,App開發人員其實是沒必要了解這么多內容的。我們看對App開發有用的幾個點:
1)首先,Binder分為Client和Server兩個進程。
> **注意**,Client和Server是相對的。誰發消息,誰就是Client,誰接收消息,誰就是Server。
舉個例子,兩個進程A和B之間使用Binder通信,進程A發消息給進程B,那么這時候A是Binder Client,B是Binder Server;進程B發消息給進程A,那么這時候B是Binder Client,A是Binder Server——其實這么說雖然簡單了,但還是不太嚴謹,我們先這么理解著。
2)其次,我們看下面這個圖(摘自田維術的博客),基本說明白了Binder的組成解構:

圖中的IPC就是進程間通信的意思。
圖中的ServiceManager,負責把Binder Server注冊到一個容器中。
有人把ServiceManager比喻成電話局,存儲著每個住宅的座機電話,還是很恰當的。張三給李四打電話,撥打電話號碼,會先轉接到電話局,電話局的接線員查到這個電話號碼的地址,因為李四的電話號碼之前在電話局注冊過,所以就能撥通;沒注冊,就會提示該號碼不存在。
對照著Android Binder機制,對著上面這圖,張三就是Binder Client,李四就是Binder Server,電話局就是ServiceManager,電話局的接線員在這個過程中做了很多事情,對應著圖中的Binder驅動
3)接下來我們看Binder通信的過程,還是摘自田維術博客的一張圖:

> **注**:圖中的SM也就是ServiceManager。
我們看到,Client想要直接調用Server的add方法,是不可以的,因為它們在不同的進程中,這時候就需要Binder來幫忙了。
* 首先是Server在SM這個容器中注冊。
* 其次,Client想要調用Server的add方法,就需要先獲取Server對象, 但是SM不會把真正的Server對象返回給Client,而是把Server的一個代理對象返回給Client,也就是Proxy。
* 然后,Client調用Proxy的add方法,SM會幫他去調用Server的add方法,并把結果返回給Client。
以上這3步,Binder驅動出了很多力,但我們不需要知道Binder驅動的底層實現,涉及到C++的代碼了——把有限的時間去做更有意義的事情。
App開發人員對Binder的掌握,這些內容就足夠了。
**總結**:
學習Binder,是為了更好的理解AIDL,基于AIDL模型,進而了解四大組件的原理。
理解了Binder,再看AMS和四大組件的關系,就像是Binder的兩個進程Server和Client通信。
- 前言
- Android 熱補丁技術——資源的熱修復
- 插件化系列詳解
- Dex分包——MultiDex
- Google官網——配置方法數超過 64K 的應用
- IMOOC熱修復與插件化筆記
- 第1章 class文件與dex文件解析
- Class文件解析
- dex文件解析
- class與dex對比
- 第2章 虛擬機深入講解
- 第3章 ClassLoader原理講解
- 類的加載過程
- ClassLoade源碼分析
- Android中的動態加載
- 第4章 熱修復簡單講解
- 第5章 熱修復AndFix詳解
- 第6章 熱修復Tinker詳解及兩種方式接入
- 第7章 引入熱修復后代碼及版本管理
- 第8章 插件化原理深入講解
- 第9章 使用Small完成插件化
- 第10章 使用Atlas完成插件化
- 第11章 課程整體總結
- DN學院熱修復插件化筆錄
- 插件化
- 熱修復
- Android APP開發應掌握的底層知識
- 概述
- Binder
- AIDL
- AMS
- Activity的啟動和通信原理
- App啟動流程第2篇
- App內部的頁面跳轉
- Context家族史
- Service
- BroadcastReceiver
- ContentProvider
- PMS及App安裝過程