android視窗管理

2021-07-06 07:39:08 字數 1150 閱讀 9899

mwindowmanager = (windowmanager)context.getsystemservice(context.window_service);

window w = policymanager.makenewwindow(mcontext);

mwindow = w;

dialog 中的一點原始碼 

@override

public void onactivitycreated(bundle arg0)

window w= policymanager.makenewwindow(this)例項化乙個phonewindow物件,

phonewindow是window 的衍生物件

但是這個物件還是比較抽象的東西。在activity開始oncreate呼叫時,

會呼叫setcontentview方法。會去獲得之前那個phonewindow物件對應的decorview,

最後通過層層視窗修飾(狀態列等)後呼叫activity的makevisible方法,

在方法中通過addiew方法完成視窗的新增。

視窗管理是android的乙個核心內容。它管理著視窗的建立和銷毀,布局和大小,焦點的控制等等。視窗可以分為兩類:

一種是應用視窗,即由具體應用建立的視窗,其實其中還可以細分出父視窗和子視窗。視窗一般都會對應乙個activity。

一種是系統視窗,如狀態列,這類視窗由系統直接通過windowmanager來建立,和activity無關。

在這裡,視窗的概念其實可以說由三部分構成,一部分是用來描述視窗資訊的,由windowstate物件表示。

乙個windowstate物件對應乙個視窗,它擁有繪製視窗所需要的資訊。但是真正去繪製視窗需要另一部分內容su***ce來完成,

最終會通過su***ceflinger完成繪圖。還有一部分就是對訊息的處理,windowmanagerservice把視窗資訊傳遞給inputmanager,

這樣inputdispatcher就能根據當前視窗的狀態進行訊息處理。

windowmanager和其他很多android的服務一樣,採用c/s的架構。其中windowmanagerservice跑在system_server程序,作為服務端,客戶端通過ipc呼叫和它進行互動。

Android視窗管理

總覽 在android中,視窗的管理系統是基於c s模式的。其中,客戶端負責請求建立視窗 使用視窗,而服務端則完成視窗的維護 顯示。如圖所示,在client端,並不是直接與wms互動,而是通過本地物件windowmanager,然後由windowmanager完成和wms的互動。對於android應...

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