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...