一.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中的方法就如同調用自己的函數。