Andorid Binder进程间通信---总结
一、Server和Service Manager進(jìn)程間通信
? ? ? ? Service Manager進(jìn)程啟動(dòng)時(shí),已經(jīng)創(chuàng)建了Service Manager實(shí)體對象,沒有Service Manager本地對象。
? ? ? ? Server首先獲取了Server代理對象,句柄值為0。沒有Server引用對象。
? ? ? ? Server----->Service Manager
? ? ? ??Server找到目標(biāo)進(jìn)程:依據(jù)Server代理對象的句柄值0,找到Service Manager實(shí)體對象,然后找到Service Manger進(jìn)程,也就是目標(biāo)進(jìn)程。
? ? ? ? Server傳遞的數(shù)據(jù):包括flat_binder_object結(jié)構(gòu)體,當(dāng)中handle為Service Manager的引用對象的句柄值,Service Manager的引用對象引用了Server的實(shí)體對象,Server的實(shí)體對象又引用了Server的本地對象。(binder_transaction函數(shù)case?BINDER_TYPE_BINDER)。
? ? ? ? Service Manager處理數(shù)據(jù):svcinfo結(jié)構(gòu)體ptr為Servicer Manager的引用對象句柄值,name為傳遞進(jìn)來的字符串。
? ? ? ? Service Manager----->Server
? ? ? ? Service Manager找到目標(biāo)進(jìn)程:依據(jù)thread->transaction_stack->from找到目標(biāo)進(jìn)程,即Server進(jìn)程。
? ? ? ? Service Manager傳遞的數(shù)據(jù):返回正確值0。
? ? ? ? Server處理數(shù)據(jù):Server循環(huán)等待。
二、Client和Service Manager進(jìn)程間通信
? ? ? ? Service Manager進(jìn)程啟動(dòng)時(shí),已經(jīng)創(chuàng)建了Service Manager實(shí)體對象,沒有Service Manager的本地對象。
? ? ? ? Client首先獲取了Client代理對象,句柄值為0。沒有Client引用對象。
? ? ? ??Client----->Service Manager? ? ? ??Client找到目標(biāo)進(jìn)程:依據(jù)Client進(jìn)程代理對象的句柄值0,找到Service Manager實(shí)體對象,然后找到Service Manger進(jìn)程,也就是目標(biāo)進(jìn)程。
? ? ? ??Client傳遞的數(shù)據(jù):svcinfo 結(jié)構(gòu)體name那個(gè)字符串。
? ? ? ? Service Manager處理數(shù)據(jù):獲得binder_object結(jié)構(gòu)體,當(dāng)中pointer指向了Service Manager的引用對象(引用了Server的實(shí)體對象)的句柄值。
? ? ? ? Service Manager----->Client
? ? ? ??Service Manager找到目標(biāo)進(jìn)程:依據(jù)thread->transaction_stack->from找到目標(biāo)進(jìn)程,即Client進(jìn)程。
? ? ? ??Service Manager傳遞的數(shù)據(jù):傳遞的內(nèi)容flat_binder_object結(jié)構(gòu)體,handle為Client的引用對象(引用了Server的實(shí)體對象)的句柄值。(binder_transaction函數(shù)case?BINDER_TYPE_HANDLE)。
? ? ? ??Client處理數(shù)據(jù):返回Client代理對象(句柄值是上面Client引用對象的句柄值)。
三、Client和Server進(jìn)程間通信
? ? ? ?眼下已經(jīng)獲取了Client代理對象,Client引用對象,Server實(shí)體對象,Server本地對象。
? ? ? ?Client----->Server
? ? ? ?Client找到目標(biāo)進(jìn)程:依據(jù)Client代理對象的句柄值,首先找到Client引用對象,通過Client引用對象再找到Server的實(shí)體對象,通過Server實(shí)體對象,找到Server進(jìn)程,也就是目標(biāo)進(jìn)程。
? ? ? ?Client傳遞的數(shù)據(jù):一個(gè)用于匹配的描寫敘述符。和比如GET_VALUE命令。
? ? ? ?Server處理數(shù)據(jù):依據(jù)找到的Server實(shí)體對象,找到Server本地對象,利用Server本地對象來運(yùn)行GET_VALUE命令獲取值。
? ? ? ?Server----->Client
? ? ? ?Server找到目標(biāo)進(jìn)程:依據(jù)thread->transaction_stack->from找到目標(biāo)進(jìn)程,即Client進(jìn)程。
? ? ? ?Server傳遞的數(shù)據(jù):傳遞的數(shù)據(jù)返回值是getVal獲取的值(利用Server本地對象來運(yùn)行GET_VALUE命令獲取值)。
? ? ? ?Client處理數(shù)據(jù):把上面返回的結(jié)果讀取出來。
轉(zhuǎn)載于:https://www.cnblogs.com/bhlsheji/p/4280362.html
總結(jié)
以上是生活随笔為你收集整理的Andorid Binder进程间通信---总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS升级Python2.7及安装
- 下一篇: WdatePicker 设置日期第一个比