總覽
在android中,視窗的管理系統是基於c/s模式的。其中,客戶端負責請求建立視窗、使用視窗,而服務端則完成視窗的維護、顯示。
如圖所示,在client端,並不是直接與wms互動,而是通過本地物件windowmanager,然後由windowmanager完成和wms的互動。對於android應用來說,這個互動是透明的,即應用不能感知到wms的存在。
視窗的型別
framework定義了三種視窗的型別,定義在windowmanager中,
windowmanager對這三種型別採用了z-order順序管理,即每乙個型別用乙個int常量表示,代表了視窗對應的層(layer)。wms在進行視窗疊加時,會按照int大小分配不同層,int值越大,代表層的位置越靠上。
1.應用視窗型別
定義
意義
第乙個應用視窗
基視窗,所有其他型別的
應用視窗將出現在基視窗上層
所有activity對應的視窗
應用程式啟動時先顯示此視窗,當真正的視窗配置完成後,此視窗被關閉
最後乙個應用視窗
2.子視窗型別
定義
意義
first_sub_window(f) = 1000
第乙個子視窗
應用視窗的子視窗,popupwindow的預設型別
用來顯示media的視窗
optionmenu、contextmenu的預設型別
last_sub_window = 1999
最後乙個子視窗
建立子視窗時,客戶端可以指定視窗型別介於1000-1999之間,而wms在進行視窗疊加時,會動態調整層值。
3.系統視窗
建立系統視窗可以指定層值2000~2999之間,wms在進行視窗d疊加時,會動態改變視窗的層值。系統視窗所獨特的一點是,有的系統視窗只能出現乙個,例如輸入法視窗,否則使用者會覺得很亂。因此,wms在接受到建立視窗的訊息時,會進行一定的檢查,確保該視窗只能被建立一次。
token變數的意義
token翻譯為象徵,符號,代表。在建立視窗的時候,多處定義了和token有關的變數,該變數的一般型別都是乙個ibinder物件。ibinder物件的作用就是為了ipc呼叫(程序間通訊)。
1.activity中的mtoken
android視窗管理
mwindowmanager windowmanager context.getsystemservice context.window service window w policymanager.makenewwindow mcontext mwindow w dialog 中的一點原始碼 ov...
Android視窗管理(2) 訊息傳遞
本文內容參考 android 核心分析 13 android gwes之android視窗管理window是頂級的視窗概念,而activity中的decorview則是視窗中的頂級view,建立activity時,decorview會attach到activity的視窗中,同時也被加入到window...
android視窗洩漏
在做專案是遇到這個錯誤 google windowmanager activity has leaked window 產生原因 我們知道android的每乙個activity都有個windowmanager窗體管理器,同樣,構建在某個activity之上的對話方塊 popupwindow也有相應的...