Activity,Window信姓,DecorView鸵隧,ViewRootImpl

在 Activity 中進行一些窗口類的操作時,有時操作 Activity意推,有時操作 Window豆瘫,有時又操作 DecorView,腦子很亂菊值。在這里梳理一下 Activity外驱,Window,DecorView腻窒,ViewRootImpl 之間的關(guān)系昵宇。

Activity 管理生命周期,通過 Window 顯示 View儿子。
Window 負責創(chuàng)建與管理 DecorView瓦哎,通過 WindowManager,使用自己的 WindowManager.LayoutParams mWindowAttributes 顯示自己的 DecorView柔逼。
WindowManagerGlobal 創(chuàng)建 ViewRootImpl蒋譬,ViewRootImpl 負責與 WMS,SF 交互愉适,顯示犯助,更新 View。

PhoneWindow 創(chuàng)建 DecorView:

DecorView 是 Activity 所擁有的 View 樹的頂層 View维咸。它是在 PhoneWindow 的構(gòu)造函數(shù)中創(chuàng)建的剂买。

PhoneWindow 構(gòu)造函數(shù)

Activity.setContentView

每次創(chuàng)建 Activity 時都要使用的 setContentView扑媚。其實就是將 View 添加為 DecorView 的 mContentParent ( id ==?Window.ID_ANDROID_CONTENT ) 的子 View。
要獲取這個 mContentParent雷恃,可以使用

getWindow().getDecorView().findViewById(Window.ID_ANDROID_CONTENT)

Window 布局屬性如何生效

Window 內(nèi)部有 WindowManager.LayoutParams? mWindowAttributes 成員變量疆股。

Window 的 Attributes

通過 Window 更改的布局屬性,最終就是通過這個 mWindowAttributes 生效的倒槐。
舉個例子旬痹,調(diào)用 Window 的setSoftInputMode:

Window.setSoftInputMode

設(shè)置屬性后,調(diào)用 dispatchWindowAttributesChanged 生效:

Window.dispatchWindowAttributesChanged

對于 Activity 的 PhoneWindow讨越,mCallback 就是 Activity:

Activity implements Window.Callback

最終两残,Activity 通過 WindowManager 更新 LayoutParams:

Activity.onWindowAttributesChanged

ViewRootImpl

ViewRootImpl 負責與 WMS,SF 交互把跨。

ViewRootImpl 是在 addView 時人弓,在 WindowManagerGlobal 中創(chuàng)建的。所以着逐,對于 Activity 和 Window崔赌,ViewRootImpl 其實是不可見的:

WindowManagerGlobal.addView

Window vs PopupWindow

綜上,向 WMS 添加 View耸别,從 app 的角度看健芭,Window 和 DecorView 不是必須的。Window 只是方便對 View 進行管理秀姐,除了 Activity慈迈,也可以在別的地方使用 Window,比如 Dialog 就是通過 Window 添加 View 的省有。
同時痒留,Window 也不是必須的。比如 PopupWindow蠢沿,自己作為 Window伸头,沒有使用到 Window。同時也沒有使用 DecorView搏予,而是使用自己的 PopupDecorView:

PopupWindow.mDecorView

PopupWindow 使用 WindowManger 添加 View:

PopupWindow.invokePopup
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末熊锭,一起剝皮案震驚了整個濱河市弧轧,隨后出現(xiàn)的幾起案子雪侥,更是在濱河造成了極大的恐慌,老刑警劉巖精绎,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件速缨,死亡現(xiàn)場離奇詭異,居然都是意外死亡代乃,警方通過查閱死者的電腦和手機旬牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門仿粹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人原茅,你說我怎么就攤上這事吭历。” “怎么了擂橘?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵晌区,是天一觀的道長。 經(jīng)常有香客問我通贞,道長朗若,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任昌罩,我火速辦了婚禮哭懈,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茎用。我一直安慰自己遣总,他們只是感情好,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布轨功。 她就那樣靜靜地躺著彤避,像睡著了一般。 火紅的嫁衣襯著肌膚如雪夯辖。 梳的紋絲不亂的頭發(fā)上琉预,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音蒿褂,去河邊找鬼圆米。 笑死,一個胖子當著我的面吹牛啄栓,可吹牛的內(nèi)容都是我干的娄帖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼昙楚,長吁一口氣:“原來是場噩夢啊……” “哼近速!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起堪旧,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤削葱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后淳梦,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體析砸,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年爆袍,在試婚紗的時候發(fā)現(xiàn)自己被綠了首繁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片作郭。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弦疮,靈堂內(nèi)的尸體忽然破棺而出夹攒,到底是詐尸還是另有隱情,我是刑警寧澤胁塞,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布芹助,位于F島的核電站,受9級特大地震影響闲先,放射性物質(zhì)發(fā)生泄漏状土。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一伺糠、第九天 我趴在偏房一處隱蔽的房頂上張望蒙谓。 院中可真熱鬧,春花似錦训桶、人聲如沸累驮。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谤专。三九已至,卻和暖如春午绳,著一層夾襖步出監(jiān)牢的瞬間置侍,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工拦焚, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜡坊,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓赎败,卻偏偏與公主長得像秕衙,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子僵刮,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

推薦閱讀更多精彩內(nèi)容