Android視窗管理

2021-07-10 07:09:28 字數 1480 閱讀 9044

總覽

在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也有相應的...