hidl可以用於程序間通訊(ipc),而程序間的通訊通常採用binder機制.
binder是android系統程序間通訊(ipc)方式之一。linux已經擁有的程序間通訊ipc手段(internet process connection)包括: 管道(pipe),訊號(signal), 跟蹤(trace),插口(socket),報文佇列(message),共享記憶體(share memory)和訊號量(semaphore)。binder是android的主要ipc方式。
binder基於client-server通訊模式。對於server端而言,binder是乙個訪問接入點,client通過這個接入點來對server傳送請求;對client端而言,binder是通向server的入口,client想與某個server通訊必須先得到入口許可。
binder框架包括四個部分:client,server,servicemanager和binder驅動。android8.0以後servicemanager 現在專供framework使用,而應用程序和**商程序無法再對其進行訪問。
不過,**商服務現在可以使用 vndservicemanager。將這四部分與網路通訊進行模擬:client是客戶端,server是伺服器端,servicemanager是網域名稱伺服器(dns),binder驅動是路由器。
首先,server要向servicemanager註冊binder實體物件和名字(就像乙個**除了有ip位址還要有自己的**),然後client就可以根據名字向servicemanager請求binder的引用。servicemanager就從查詢表中找到該名字對應的條目,從條目中取出binder的引用並發給client。binder驅動在整個過程中負責傳遞資料。這裡面有個問題:server是乙個程序,servicemanager也是乙個程序,那server在向servicemanager註冊binder時 是乙個程序間通訊過程,這又要用到binder機制。這就好像是蛋可以孵出雞,但前提卻是你要找只雞來生蛋。
解決辦法和網路通訊類似:首先你得預先配置好dns的伺服器位址,其他伺服器或者客戶端才能訪問這個dns伺服器。同樣地,servicemanager是乙個伺服器,它通過binder_set_context_mgr命令將自己註冊成servicemanager,這時binder驅動會自動為它建立乙個binder實體(造乙隻雞來生蛋),而binder的引用都會在客戶端(這時server和client被視為客戶端)被自動建立為0號引用(相當於dns的位址)。於是client和server就可以用0號引用來訪問servicemanager了。
什麼是Unicode是什麼是UTF 8是什麼
在這種語言環境下,不會再有語言的編碼衝突,在同屏下,可以顯示任何語言的內容,這就是unicode的最大好處。那麼unicode是如何編碼的呢?其實非常簡單。就是將世界上所有的文字用 個位元組統一進行編碼。可能你會問,個位元組最多能夠表示65536個編碼,夠用嗎?南韓和日本的大部分漢字都是從中國傳播過...
python 原始碼是什麼 Python 是什麼?
python 是什麼?python是乙個高層次的結合了解釋性 編譯性 互動性和物件導向的指令碼語言,該語言設計具有很強的可讀性,相比其它語言經常使用英文關鍵字和一些標點符號,它更具有特色。python 特點 1.易於學習 python有相對較少的關鍵字,結構簡單,和乙個明確定義的語法,學習起來更加簡...
undi是什麼意思 undefined是什麼意思
我們通常在上網時使用微博 qq空間 我經常在玩遊戲時遇到未定義的錯誤。對於許多計算機白人,我不明白這個錯誤資訊的含義。讓我們看乙個簡單的例子。3 通過查詢我們發現 未定義 的含義是未澄清和未定義的,僅從字面意義上講,很難知道是什麼原因。7 非常流暢,螢幕直接彈出 簽入 問題解決了。undefined...