android Binder 工做流程

.Linux系統進程間通訊有哪些方式?
1.socket

2.name pipe
命名管道;
3.message queue
消息隊列;
4.singal
信號量;
5.share memory
共享內存;
.Java系統的通訊方式是什麼?
1.socket;
2.name pipe;
.Android系統通訊方式是什麼?
Binder 
通訊;
.Binder通訊的優點是什麼?
高效率
.Binder通訊的特色是什麼?
是同步,而不是異步;
.Binder通訊是如何實現的?
1.Binder
通訊是經過linuxbinder driver來實現的,
2.Binder
通訊操做相似線程遷移(thread migration),兩個進程間IPC看起來就象是一個進程進入另外一個進程執行代碼而後帶着執行的結果返回;
3.Binder
的用戶空間爲每個進程維護着一個可用的線程池,線程池用於處理到來的IPC以及執行進程本地消息,Binder通訊是同步而不是異步。
. Android中的 Binder通訊實現要點:linux

1. Android中的Binder通訊是基於ServiceClient的工做模型的;
2. 
全部須要IBinder通訊的進程都必須建立一個IBinder接口;
3. 
系統中有一個進程管理全部的system service
4. Android
不容許用戶添加非受權的System service
5. 
如今源碼開放了,咱們能夠修改一些代碼來實現添加底層system Service的目的;
6. 
對用戶程序來講,咱們也要建立server,或者Service用於進程間通訊;
7. ActivityManagerService
管理JAVA應用層全部的service建立與鏈接(connect),disconnect
8. 
全部的Activity也是經過這個service來啓動,加載的;
9. ActivityManagerService
也是加載在Systems Servcie中的;
.Android Service工做流程
1.Android
虛擬機啓動以前系統會先啓動service Manager進程;2.service Manager打開binder驅動,並通知binder kernel驅動程序這個進程將做爲System Service Manager
3.
而後該進程將進入一個循環,等待處理來自其餘進程的數據。4.用戶建立一個System service後,經過defaultServiceManager獲得一個遠程ServiceManager的接口,經過這個接口咱們能夠調用addService函數將System service添加到Service Manager進程中;
5.
而後client能夠經過getService獲取到須要鏈接的目的ServiceIBinder對象,這個IBinderServiceBBinderbinder kernel的一個參考,
6.
因此service IBinder binder kernel中不會存在相同的兩個IBinder對象,每個Client進程一樣須要打開Binder驅動程序。對用戶程序而言,咱們得到這個對象就能夠經過binder kernel訪問service對象中的方法。
7.Client
Service在不一樣的進程中,經過這種方式實現了相似線程間的遷移的通訊方式,對用戶程序而言當調用Service返回的IBinder接口後,訪問Service中的方法就如同調用本身的函數。
相關文章
相關標籤/搜索