一、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處理資料:把上面返回的結果讀取出來。