Android的底層基於linux相信這是全部android開發人員都瞭解的,可是android得進程間通訊機制能夠說是外來戶,羅老師介紹的很詳細,這裏我整理一下:linux
- 提供服務的進程稱爲Server進程,而訪問服務的進程稱爲Client進程。
- 同一個Server進程能夠同時運行多個組件來向Client進程提供服務,這些組件稱爲Service組件。
- 同時,同一個Client進程也能夠同時向多個Service組件請求服務,每個請求都對應有一個Client組件,或者稱爲Service代理對象。
- Server進程和Client進程都維護一個Binder線程池來處理進程間的通訊請求,已實現併發地提供和訪問服務。
- Server進程和Client進程的通訊要依靠運行在內核空間的Binder驅動程序來進行。Binder驅動程序向用戶空間暴露了一個設備文件/dev/binder,使得應用程序進程能夠間接地經過它來創建通訊通道。
- Service組件在啓動時,會將本身註冊到一個Service Manager組件中,以便Client組件能夠經過Service Manager組件找到它。所以,咱們將Service Manager組件稱爲Binder進程間通訊機制的上下文管理者,同時因爲它也須要與普通的Server進程和Client進程通訊,咱們也將它看做是一個Service組件,只不過它是一個特殊的Service組件。
- Client、Service和Service Manager運行在用戶空間,而Binder驅動程序運行在內核空間,其中,Service Manager和Binder驅動程序由系統負責提供,而Client和Service組件由應用程序來實現。Client、Service和Service Manager均是經過系統調用open、mmap和ioctl來訪問設備文件/dev/binder,從而實現與Binder驅動程序的交互,而交互的目的就是爲了可以間接地執行進程間通訊。
用一張圖來講明一下android
Binder驅動程序實如今內核空間中,注意驅動程序是放在kernel中的,而不是放在android源代碼中的。我並無下載源碼,而是在http://androidxref.com/上看到源碼,用的是kernel3.18源代碼,搜索一下就能找到binder.h 和 binder.c文件。他就是一個比較標準的驅動程序,設備文件就是 /dev/binder ,可是沒有提供hal層的代碼。併發