網上有非常多的Binder原理,很多都是貼一大堆底層代碼,甚至是C/C++代碼,對于應用開發的我來說,,貌似很難懂,而且即使懂了,不用,過段時間就忘了,所以決定就先理解個大概(還是因為太菜..)
先推薦一篇博客,覺得是講Binder最好懂的一篇,以下摘自該文章,感謝作者
Binder是為了解決跨進程通信。你說AIDL,它是基于Binder的擴展
- Binder分為Client和Server兩個進程。
注意,這里的Client和Server并不是單一規定死的,誰只能是Server或者誰只能是Clitent;
舉例:兩個進程A和B之間使用Binder通信,進程A發消息給進程B,那么這時候A是Binder Client,B是Binder Server;進程B發消息給進程A,那么這時候B是Binder Client,A是Binder Server; - 看一下圖分析
Binder
圖中的IPC就是進程間通信的意思。
圖中的ServiceManager,負責把Binder Server注冊到一個容器中。
有人把ServiceManager比喻成電話局,存儲著每個住宅的座機電話,還是很恰當的。張三給李四打電話,撥打電話號碼,會先轉接到電話局,電話局的接線員查到這個電話號碼的地址,因為李四的電話號碼之前在電話局注冊過,所以就能撥通;沒注冊,就會提示該號碼不存在。
對照著Android Binder機制,對著上面這圖,張三就是Binder Client,李四就是Binder Server,電話局就是ServiceManager,電話局的接線員在這個過程中做了很多事情,對應著圖中的Binder驅動
- 再來一張更加生動的圖
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。
好了,Binder分析到此結束. 至于Binder驅動中間做了啥,有需要的可以去自行查看,反正我是看不太懂(哭.. )