一.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通訊是通過linux的binder driver來實現的,
2.Binder通訊操作類似線程遷移(threadmigration),兩個進程間IPC看起來就象是一個進程進入另一個進程執行代碼然後帶著執行的結果返回;
3.Binder的使用者空間為每一個進程維護著一個可用的線程池,線程池用於處理到來的IPC以及執行進程本地訊息,Binder通訊是同步而不是非同步。
七. Android中的 Binder通訊實現要點:
1. Android中的Binder通訊是基於Service與Client的工作模型的;
2. 所有需要IBinder通訊的進程都必須建立一個IBinder介面;
3. 系統中有一個進程管理所有的system service:
4. Android不允許使用者添加非授權的Systemservice;
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擷取到需要串連的目的Service的IBinder對象,這個IBinder是Service的BBinder在binder kernel的一個參考,
6.所以serviceIBinder 在binder kernel中不會存在相同的兩個IBinder對象,每一個Client進程同樣需要開啟Binder驅動程式。對使用者程式而言,我們獲得這個對象就可以通過binderkernel訪問service對象中的方法。
7.Client與Service在不同的進程中,通過這種方式實現了類似線程間的遷移的通訊方式,對使用者程式而言當調用Service返回的IBinder介面後,訪問Service中的方法就如同調用自己的函數。