一.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通訊實現要點:linux
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中的方法就如同調用本身的函數。