Android開發之Binder淺析

網上有非常多的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來幫忙了。

  1. Server在SM這個容器中注冊。
  2. Client想要調用Server的add方法,就需要先獲取Server對象, 但是SM不會把真正的Server對象返回給Client,而是把Server的一個代理對象返回給Client,也就是Proxy。
  3. Client調用Proxy的add方法,SM會幫他去調用Server的add方法,并把結果返回給Client。

好了,Binder分析到此結束. 至于Binder驅動中間做了啥,有需要的可以去自行查看,反正我是看不太懂(哭.. )

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容