日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android窗口管理服务WindowManagerService的简要介绍和学习计划

發布時間:2023/12/9 Android 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android窗口管理服务WindowManagerService的简要介绍和学习计划 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ?在前一個系列文章中,我們從個體的角度來分析了Android應用程序窗口的實現框架。事實上,如果我們從整體的角度來看,Android應用程序窗口的實現要更復雜,因為它們的類型和作用不同,且會相互影響。在Android系統中,對系統中的所有窗口進行管理是窗口管理服務WindowManagerService的職責。在本文中,我們就將簡要介紹WindowManagerService的職能以及制定學習計劃。

? ? ? ?我們知道,在Android系統中,同一時刻,只有一個Activity窗口是激活的,但是,對于WindowManagerService服務來說,這并不意味著它每次只需要管理一個Activity窗口,例如,在兩個Activity窗口的切換過程中,前后兩個Activity窗口實際上都是可見的。即使在只有一個Activity窗口是可見的時候,WindowManagerService服務仍然需要同時管理著多個窗口,這是因為可見的Activity窗口可能還會被設置了壁紙窗口(Wallpaper Winodw)或者彈出了子窗口(Sub Window),以及可能會出現狀態欄(Status Bar)以及輸入法窗口(Input Method Window),如圖1所示。


圖1 Activity窗口及其子窗口、壁紙窗口、輸入法窗口和狀態欄的位置結構

? ? ? ?因此,WindowManagerService服務是不可以假設同一時刻它只需要管理一個窗口的,它需要通過各個窗口在屏幕上的位置以及大小來決定哪些窗口需要顯示的以及要顯在哪里,這實際上就是要計算出各個窗口的可見區域。

? ? ? ?從前面Android系統Surface機制的SurfaceFlinger服務渲染應用程序UI的過程分析一文可以知道,SurfaceFlinger服務在渲染整個屏幕的UI的時候,會對各個窗品的可見性進行計算,因此,WindowManagerService服務只要將它所管理的各個窗品的位置以及大小告訴SurfaceFlinger服務,后者可以幫幫它計算出各個窗口的可見區域了。注意,這里,這里所說的窗口位置包括窗口在X、Y和Z軸的位置。

? ? ? WindowManagerService服務大致按照以下方式來控制哪些窗口需要顯示的以及要顯在哪里:

? ? ? 1. 每一個Activity窗口的大小都等于屏幕的大小,因此,只要對每一個Activity窗口設置一個不同的Z軸位置,然后就可以使得位于最上面的,即當前被激活的Activity窗口,才是可見的。

? ? ? 2. 每一個子窗口的Z軸位置都比它的父窗口大,但是大小要比父窗口小,這時候Activity窗口及其所彈出的子窗口都可以同時顯示出來。

? ? ? 3. 對于非全屏Activity窗口來說,它會在屏幕的上方留出一塊區域,用來顯示狀態欄。這塊留出來的區域稱對于屏幕來說,稱為裝飾區(decoration),而對于Activity窗口來說,稱為內容邊襯區(Content Inset)。

? ? ? 4. 輸入法窗口只有在需要的時候才會出現,它同樣是出現在屏幕的裝飾區或者說Activity窗口的內容邊襯區的。

? ? ? 5. 對于壁紙窗口,它出現需要壁紙的Activity窗口的下方,這時候要求Activity窗口是半透明的,這樣就可以將它后面的壁紙窗口一同顯示出來。

? ? ? 6. 兩個Activity窗口在切換過程,實際上就是前一個窗口顯示退出動畫而后一個窗口顯示開始動畫的過程,而在動畫的顯示過程,窗口的大小會有一個變化的過程,這樣就導致前后兩個Activity窗口的大小不再都等于屏幕的大小,因而它們就有可能同時都處于可見的狀態。事實上,Activity窗口的切換過程是相當復雜的,因為即將要顯示的Activity窗口可能還會被設置一個啟動窗口(Starting Window)。一個被設置了啟動窗口的Activity窗口要等到它的啟動窗口顯示了之后才可以顯示出來。

? ? ? 從以上六點就可以看出,窗口在X、Y和Z軸的位置及其大小的計算非常重要,它們共同決定了一個窗口是否是整體可見的,還是部分可見的,或者整體不可見的。在Android系統中,WindowManagerService服務是通過一個實現了WindowManagerPolicy接口的策略類來計算一個窗口的位置和大小的。例如,在Phone平臺上,這個策略類就是PhoneWindowManager。這樣做的好處就是對于不同的平臺實現不同的策略類來達到不同的窗口控制模式。

? ? ?從上面的描述就可以看出,WindowManagerService服務除了要與Activity窗口所運行在的應用程序進程打交道之外,還需要與SurfaceFlinger服務以及窗口管理策略類PhoneWindowManager交互,如圖2所示。


圖2 WindowManagerService服務與Activity窗口、SurfaceFlinger服務、PhoneWindowManager策略的關系圖

? ? ? ?在前面Android應用程序窗口(Activity)實現框架簡要介紹和學習計劃的一系列文章中,我們已經分析過應用程序進程與WindowManagerService服務之間的交互過程了,因此,在這一系列文章中,我們就將主要分析WindowManagerService服務的實現,以及它與SurfaceFlinger服務、PhoneWindowManager策略類的交互過程。

? ? ? ?從總體上來看,WindowManagerService服務的實現是相當復雜的,例如,WindowManagerService類的核心成員函數performLayoutAndPlaceSurfacesLockedInner的代碼有1200+行,比600-行代碼的ViewRoot類的核心成員函數performTraversals還要恐怖。不過,WindowManagerService服務實現的復雜性是在預料之中的,畢竟它要管理的整個系統所有窗口的UI,而在任何一個系統中,窗口管理子系統都是極其復雜的。基于上述理由,采用硬碰硬的方式來分析WindowManagerService服務的實現是以卵擊石,因此,這個系列的文章將對WindowManagerService服務進行分拆,然后再逐個擊破,這是算法中的分而治之思想是一致的。

? ? ? ?具體來說,我們將按照以下幾個情景來分析WindowManagerService服務的實現:

? ? ? ?1. 窗口大小和位置(X軸和Y軸)的計算過程。

? ? ? ?2. 窗口的組織方式。

? ? ? ?3. 輸入法窗口的調整過程。

? ? ? ?4. 壁紙窗口的調整過程。

? ? ? ?5. 窗口Z軸位置的計算和調整過程。

? ? ? ?6. Activity窗口的啟動窗口的顯示過程。

? ? ? ?7. Activity窗口的切換過程。

? ? ? ?8. Activity窗口的動畫顯示過程。

? ? ? ?再次地,由于WindowManagerService服務的實現實在是太復雜,因此上述八個情景可能還不足于說明WindowManagerService服務的實現。如果出現這種情況,我們在分析的過程中會進行相應的調整。相信對WindowManagerService服務的實現進行分而治之的分析后,我們就可以對Android系統的UI架構有一個深刻的理解!敬請關注接下來的文章!


總結

以上是生活随笔為你收集整理的Android窗口管理服务WindowManagerService的简要介绍和学习计划的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产成人久久 | 欧美激情一区二区三区p站 欧美mv日韩mv国产网站app | 成人a在线观看 | 日日热| a√在线视频 | 国产综合福利 | 欧美劲爆第一页 | 午夜剧场欧美 | 国产大片在线观看 | 黄色电影在线视频 | 特黄特色大片免费播放器使用方法 | 中文在线资源天堂 | 欧美三级黄色 | 欧美一级在线观看视频 | 国产精品天美传媒沈樵 | 欧美高清视频 | 日韩影视一区二区三区 | 中国精品毛片 | 亚洲精品免费在线观看 | 一道本久在线中文字幕 | 婷婷精品在线 | 波多野结衣家庭主妇 | 中文字幕永久在线观看 | 亚洲综合伊人 | 在线观看色网站 | 污网在线看 | 超碰人操| 国产av电影一区 | 亚洲清色 | 日韩资源网| 国产一级在线播放 | 国产福利在线视频观看 | 久热国产精品视频 | 一级片在线免费观看视频 | 超薄肉色丝袜一二三 | 小辣椒导航 | 亚洲精品在线不卡 | 成人a级网站 | 男人和女人在床的app | 天堂bt在线| 免费在线观看日韩av | 特级av片| 97久久国产亚洲精品超碰热 | 五月视频 | 国产精品一区二区免费 | 欧美伦理一区二区三区 | 国产网站免费在线观看 | 天天拍天天操 | 亚洲色中色 | 国产三级视频在线播放 | 四虎永久免费观看 | 9色视频在线观看 | 欧洲精品在线观看 | av观看一区 | 91精品啪 | 男人久久天堂 | 四季av一区二区三区免费观看 | 中国极品少妇videossexhd 就要干就要操 | 宿舍女女闺蜜调教羞辱 | 夜间福利在线 | 亚洲精品大片www | 久久国产这里只有精品 | 国产九九九| 精品乱码一区内射人妻无码 | 国产午夜福利一区二区 | 蜜乳av懂色av粉嫩av | 69av视频在线观看 | 国产九色在线播放九色 | 久操视频在线观看 | 久久加勒比 | 欧美日韩99 | 91午夜视频 | a国产 | 日本免费中文字幕 | 午夜精品久久久久久99热 | 性视频在线播放 | 欧美一区二区三区四区在线观看 | 日日爱网站 | 91插插插影库永久免费 | 四虎在线视频免费观看 | 成人自拍网 | h色视频在线观看 | 性一交一乱一乱一视频 | 男人的天堂狠狠干 | 色www | 少妇又紧又爽视频 | 一直草| 丁香啪啪综合成人亚洲 | 超碰在线9 | 午夜视频在线观看免费视频 | 日韩av区| 亚洲国产精品第一页 | 久久久久久久美女 | 在线观视频免费观看 | 老师张开让我了一夜av | av在线免费观看一区 | 亚洲一区二区视频网站 | 麻豆tv在线 | 久久久无码人妻精品无码 |