Andorid Binder进程间通信---总结
一、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的實體對象,Server的實體對象又引用了Server的本地對象。(binder_transaction函數case?BINDER_TYPE_BINDER)。
? ? ? ? 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的實體對象)的句柄值。(binder_transaction函數case?BINDER_TYPE_HANDLE)。
? ? ? ??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處理數據:把上面返回的結果讀取出來。
轉載于:https://www.cnblogs.com/bhlsheji/p/4280362.html
總結
以上是生活随笔為你收集整理的Andorid Binder进程间通信---总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS升级Python2.7及安装
- 下一篇: WdatePicker 设置日期第一个比