AndroidBinder學習趣事

zhang_sl發表於2016-05-23

看Android原始碼無論如何繞不開Binder,因此我一直對Binder的實現機制有濃厚的興趣。無奈本人功力不夠,所以對此一直沒有清晰的認識。看了網上一些分析Binder的文章,基本都是原始碼分析,我覺得對於Binder這樣一種比較複雜的框架,最好不要一開始就進入到原始碼這麼細節的層面,很容易找不到北。我覺得應該先撇開程式碼,有原理性的介紹,再根據個人需要深入程式碼去分析。因為沒有找到合適的文章,所以我就想自己來探究,自己來寫,我主要想解決以下幾個問題:

  1. Binder的歷史?
  2. Binder和Linux原有的IPC有什麼區別,為什麼一定要用Binder?
  3. Binder整體的設計是怎樣的?
  4. Binder的跨程式資料傳輸是怎麼實現的?

但是,正當我準備自己動手探究時,卻找到一篇很不錯的文章Android Binder design and implementation design,一下子把我的問題都回答了,開心,又有點失落。這真是一篇高質量的文章,我想我可以把它翻譯成中文,跟大家分享。然而緊接著在裡面一個例子中看到”Zhang San”。心裡驚呼“難道原文是中文?”。還真找到了,原文在CSDN上Android Bander設計與實現 – 設計篇。這下只有為國人感到自豪了。這篇文章清晰地闡述了Binder的設計實現機制,清晰易懂。

整體的設計已經瞭然於胸,就可以自己去看程式碼,親自觸控裡面的實現細節。網上有不少原始碼分析的文章,最有名的要數老羅的。但是我覺得原始碼就像一個豐富的寶庫,原始碼分析應該是帶著問題,有目的地去分析,不然只會被別人牽著鼻子走,或者迷失其中。就像老羅在系統地分析Android原始碼前也是看了很多書(見那兩年煉就的Android內功修養)。

除了閱讀原始碼,瞭解Binder的實現細節,我還想了解Linux原有的IPC機制,例如管道,System V IPC,socket是如何設計的,其設計思想和出發點各有什麼不同?此處先留著問題,後面再探究總結。


相關文章