android Binder學習

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通信是如何實現的?
1.Binder通信是通過linux的binder driver來實現的,
2.Binder通信操作類似線程遷移(thread migration),兩個進程間IPC看起來就象是一個進程進入另一個進程執行代碼然後帶着執行的結果返回;
3.Binder的用戶空間爲每一個進程維護着一個可用的線程池,線程池用於處理到來的IPC以及執行進程本地消息,Binder通信是同步而不是異步。

五.Binder通信的特點是什麼?
是同步,而不是異步;

六. Android中的 Binder通信實現要點:
1. Android中的Binder通信是基於Service與Client的工作模型的;
2. 所有需要IBinder通信的進程都必須創建一個IBinder接口;
3. 系統中有一個進程管理所有的system service:
4. Android不允許用戶添加非授權的System service;
5. 對用戶程序來說,可以創建自己的server,或者Service用於進程間通信;
6. ActivityManagerService管理JAVA應用層所有的service創建與連接(connect),disconnect;
7. 所有的Activity也是通過這個service來啓動,加載的;
8. 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獲取到需要連接的目的Service的IBinder對象,這個IBinder是Service的BBinder在binder kernel的一個參考,
6.所以service IBinder 在binder kernel中不會存在相同的兩個IBinder對象,每一個Client進程同樣需要打開Binder驅動程序。對用戶程序而言,我們獲得這個對象就可以通過binder kernel訪問service對象中的方法。
7.Client與Service在不同的進程中,通過這種方式實現了類似線程間的遷移的通信方式,對用戶程序而言當調用Service返回的IBinder接口後,訪問Service中的方法就如同調用自己的函數

發佈了39 篇原創文章 · 獲贊 3 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章