一.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通信操作類似線程遷移(thread migration),兩個程序間IPC看起來就象是一個程序進入另一個程序執行代碼然後帶着執行的結果傳回;
3.Binder的使用者空間為每一個程序維護着一個可用的線程池,線程池用于處理到來的IPC以及執行程序本地消息,Binder通信是同步而不是異步。
七. Android中的 Binder通信實作要點:
1. Android中的Binder通信是基于Service與Client的工作模型的;
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擷取到需要連接配接的目的Service的IBinder對象,這個IBinder是Service的BBinder在binder kernel的一個參考,
6.是以service IBinder 在binder kernel中不會存在相同的兩個IBinder對象,每一個Client程序同樣需要打開Binder驅動程式。對使用者程式而言,我們獲得這個對象就可以通過binder kernel通路service對象中的方法。
7.Client與Service在不同的程序中,通過這種方式實作了類似線程間的遷移的通信方式,對使用者程式而言當調用Service傳回的IBinder接口後,通路Service中的方法就如同調用自己的函數。