Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Andorid Binder進程間通信---總結

Andorid Binder進程間通信---總結

編輯:關於Android編程

一、Server和Service Manager進程間通信

Service Manager進程啟動時,已經創建了Service Manager實體對象,沒有Service Manager本地對象。

Server首先獲取了Server代理對象,句柄值為0。沒有Server引用對象。

Server----->Service Manager

Server找到目標進程:根據Server代理對象的句柄值0,找到Service Manager實體對象,然後找到Service Manger進程,也就是目標進程。

Server傳遞的數據:包含flat_binder_object結構體,其中handle為Service Manager的引用對象的句柄值,Service Manager的引用對象引用了Server的實體對象,System的實體對象又引用了Server的本地對象。

Service Manager處理數據:svcinfo結構體ptr為Servicer Manager的引用對象句柄值,name為傳遞進來的字符串。

Service Manager----->Server

Service Manager找到目標進程:根據thread->transaction_stack->from找到目標進程,即Server進程。

Service Manager傳遞的數據:返回正確值0。

Server處理數據:Server循環等待。


二、Client和Service Manager進程間通信

Service Manager進程啟動時,已經創建了Service Manager實體對象,沒有Service Manager的本地對象。

Client首先獲取了Client代理對象,句柄值為0。沒有Client引用對象。

Client----->Service Manager

Client找到目標進程:根據Client進程代理對象的句柄值0,找到Service Manager實體對象,然後找到Service Manger進程,也就是目標進程。

Client傳遞的數據:svcinfo 結構體name那個字符串。

Service Manager處理數據:獲得binder_object結構體,其中pointer指向了Service Manager的引用對象(引用了Server的實體對象)的句柄值。

Service Manager----->Client

Service Manager找到目標進程:根據thread->transaction_stack->from找到目標進程,即Client進程。

Service Manager傳遞的數據:傳遞的內容flat_binder_object結構體,handle為Client的引用對象(引用了Server的實體對象)的句柄值。

Client處理數據:返回Client代理對象(句柄值是上面Client引用對象的句柄值)。


三、Client和Server進程間通信

目前已經獲取了Client代理對象,Client引用對象,Server實體對象,Server本地對象。

Client----->Server

Client找到目標進程:根據Client代理對象的句柄值,首先找到Client引用對象,通過Client引用對象再找到Server的實體對象,通過Server實體對象,找到Server進程,也就是目標進程。

Client傳遞的數據:一個用於匹配的描述符。和例如GET_VALUE命令。

Server處理數據:根據找到的Server實體對象,找到Server本地對象,利用Server本地對象來執行GET_VALUE命令獲取值。

Server----->Client

Server找到目標進程:根據thread->transaction_stack->from找到目標進程,即Client進程。

Server傳遞的數據:傳遞的數據返回值是getVal獲取的值(利用Server本地對象來執行GET_VALUE命令獲取值)。

Client處理數據:把上面返回的結果讀取出來。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved