Binder 1 基礎概念

2021-07-31 20:47:15 字數 2304 閱讀 4967

binder中的執行緒

binder通訊過程中的記憶體拷貝

binder資料資料相關

binder使用

binder死亡通知

參考:binder是什麼?這個是面試中最長見的問題,請問你如何回答?這裡就有你要的答案。

binder是android中的一種ipc(程序間通訊)方式。binder採用c/s架構。

作用是完成程序間通訊,實現不同程序間的資料共享。

linux還有其他很多種通行方式,如記憶體共享,socket、管道、訊息佇列、管道等。

原因:servicemanager自己也是乙個service,由init程序建立。對於自定義的service來說,service就是乙個client,servicemanager就是乙個service。他們之間也是通過binder來通訊

簡單來說,servicemanager中維護了一張表,表的鍵string型別的鍵,值為binder物件引用。client通過名字就可以獲取到binder實體的應用。

servicemanger的主要工作是提供了addservice/getservcie介面,提供service的註冊、獲取。

過程:

server建立了binder實體,為其取乙個字元形式,可讀易記的名字,將這個binder連同名字以資料報的形式通過binder驅動傳送給smgr,通知smgr註冊乙個名叫張三的binder,它位於某個server中。驅動為這個穿過程序邊界的binder建立位於核心中的實體節點以及smgr對實體的引用,將名字及新建的引用打包傳遞給smgr。smgr收資料報後,從中取出名字和引用填入一張查詢表中

service,client,servicemanager 執行與使用者控制項。

binder驅動執行與核心控制項。

四個角色之間的關係:(來自android程序間通訊(ipc)機制binder簡要介紹和學習計畫)

binder的四個角色,基礎是native層的支援,framwork層也有同樣的一層,與native層相對應。

來自binder系列7—framework層分析。作者寫的這乙個binder系列,新手可以從系列10開始看,先有個整體的把我,在去看各個細分章節。

所以當client請求操作未耗時操作時,不要在主線程中進行,否則容易引起anr。

這個可以說明cliet、service間的執行緒關係。其實這個圖是用來說明通訊協議的。來自:binder系列2—binder driver再探

binder執行緒池預設最大擁有16個執行緒,主線程是和程序建立一起建立的。其他執行緒binder驅動根據當前cliet請求情況建立。主線程是不會退出的,為binder程序的守護執行緒。

binder 只經過一次記憶體拷貝。client從使用者空間拷貝資料到核心空間,由於核心空間與service的使用者控制項是共享記憶體的。service通過偏移記憶體位址的方式獲取共享的資料。

如下圖:

想傳遞更多資料怎麼辦?

注意,當aidl中的client、service在同乙個程序中時,則service、client中的ibinder為同乙個物件。懷疑是不是servicemanger中的mcache直接返回的。當不在同乙個程序時,不是同乙個物件?為什麼,哪位知道告訴我下。

1 基礎概念

什麼是核心動畫,做什麼用的 core animation是乙個復合引擎,它的職責就是盡可能快地組合螢幕上不同的可視內容,這個內容是 被分解成獨立的圖層,儲存在乙個叫做圖層樹的體系之中。於是這個樹形成了uikit以及在ios應用程式當 中你所能在螢幕上看見的一切的基礎。檢視與圖層的關係 圖層才是真正用...

資料探勘1基礎概念

機器學習 假設用p來估計計算機程在某個任務t上的效能,若乙個程式通過利用經驗e在t中獲得了效能改善,我們說關於t和p,該程式對e進行了學習。適用機器學習的地方 1 表現或目標能夠增進 2 不知道把規則寫下 3 一切學習從資料開始 人工智慧的核心主要使用歸納 綜合而不是演繹。機器學習的三要素 資料 模...

iptables(1) 基礎概念

iptables 1 基礎概念 1.防火牆相關概念 1.1分類 邏輯上 主機防火牆 網路防火牆 前者針對單個主機進行防護,後者位於網路入口或邊緣,針對網路入口進行防護,服務於防火牆背後的本地區域網 物理上 硬體防火牆 軟體防火牆 2.iptables理解 所以說,雖然我們使用service ipta...