您好,登錄后才能下訂單哦!
這篇“c++ binder的調用流程是什么”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“c++ binder的調用流程是什么”文章吧。
本文主要接收客戶端通過binder調到服務端的過程,也就是從transact到onTransact的過程
客戶端發的請求
Step 1:transact一步會調用remote的transact,而該remote對象是通過ServiceManager獲取回來的一個IBinder實例
Step 2:BinderProxy:transact:調用transactNative
Step 3:android_util_Binder:android_os_BinderProxy_transact
Step 4:BpBinder:transact
Step 5:IPCThreadState:transact,調用writeTransactionData把數據寫到mOut,然后調用waitForResponse,會調用talkWithDriver將數據寫到底層驅動,如果有結果會把結果讀取到mIn
服務端的處理:
IPCThreadState:joinThreadPool,這里有一個循環,通過getAndExecuteCommand不停地讀取底層的數據并執行,客戶端發過來的命令時,處理的是BR_TRANSACTION,調用BBinder的transact進行處理
Step 6: BBinder:transact->onTransact,這一次是C層的onTransact,java層的實現也是通過C++層的封裝來實現的
binder的原理簡單來講是兩個進程有一塊內存映射到同塊物理內存,如果不映射的話,那么兩個進程使用的是邏輯地址,的物理內存是不會映射到同一塊內存的,因此映射并內存共享內存來實現通信,是binder的本質工作。
以上就是關于“c++ binder的調用流程是什么”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。