android的窗口机制分析------ViewRoot类
ViewRoot是GUI管理系統(tǒng)與GUI呈現(xiàn)系統(tǒng)之間的橋梁,根據(jù)ViewRoot的定義,我們發(fā)現(xiàn)它并不是一個(gè)View類型,而是一個(gè)Handler。
它的主要作用如下:
A. 向DecorView分發(fā)收到的用戶發(fā)起的event事件,如按鍵,觸屏,軌跡球等事件;
B. 與WindowManagerService交互,完成整個(gè)Activity的GUI的繪制。
? ? 事件處理和GUI繪制的具體實(shí)現(xiàn)在后面的文章中再描述,這篇文章就主要介紹ViewRoot對(duì)象如何同WindowManagerService橋接起來的。? ??
? ? 在完成Activity的ContentView設(shè)置之后,下面的工作就是準(zhǔn)備顯示了,準(zhǔn)備顯示的主要工作就是建立起Application和WindowManagerService之間的聯(lián)系,第一步的工作就是向WindowManager添加前面涉及到的DecorView,我們已經(jīng)知道這個(gè)DecorView包含了整個(gè)Activity的GUI,所以我們只需要把這個(gè)DecorView交給WindowManager打理就可以了。
? ? 下面看看整個(gè)的過程 ? ?
A.?????向WindowManager添加DecorView;
handleResumeActivity@ActivityThread.java
[java]?view plaincopy
B. WindowManagerImpl保存DecorView到mViews,創(chuàng)建對(duì)應(yīng)的ViewRoot;
C.調(diào)用ViewRootsetView()方法
這個(gè)方法中的主要工作就是建立起與WindowManagerService之間的聯(lián)系。
[java]?view plaincopy
在這個(gè)方法中只需要關(guān)注兩個(gè)步驟
(1)???requestLayout()
? ? 請(qǐng)求WindowManagerService繪制GUI,但是注意一點(diǎn)的是它是在與WindowManagerService建立連接之前繪制,為什么要在建立之前請(qǐng)求繪制呢?
? ? 其實(shí)兩者實(shí)際的先后順序是正好相反的,與WMS建立連接在前,繪制GUI在后,那么為什么代碼的順序和執(zhí)行的順序不同呢?這里就涉及到ViewRoot的屬性了,我們前面提到ViewRoot并不是一個(gè)View,而是一個(gè)Handler,那么執(zhí)行的具體流程就是這樣的:
a)???????ActivityThread的handler函數(shù)注冊(cè)了啟動(dòng)一個(gè)新的Activity的請(qǐng)求處理LAUNCH_ACTIVITY,LAUNCH_ACTIVITY的處理過程調(diào)用到了ViewRoot的setView()方法,因此上圖代碼在被執(zhí)行時(shí)正處于LAUNCH_ACTIVITY消息的處理過程中。
b)???????requestLayout()其實(shí)是向messagequeue發(fā)送了一個(gè)請(qǐng)求繪制GUI的消息,并且ViewRoot和ActivityThread共用同一個(gè)MessageQueue(如下圖),因此繪制GUI的過程一定是在LAUNCH_ACTIVITY消息被處理完之后,也就是sWindowSessoin.add()方法調(diào)用完之后。
(2)???sWindowSessoin.add()
從字面意思理解的話,IWindowSession sWindowSessoin是ViewRoot和WindowManagerService之間的一個(gè)會(huì)話層,它的實(shí)體是在WMS中定義,作為ViewRoot requests WMS的橋梁。
add()方法的第一個(gè)參數(shù)mWindow是ViewRoot提供給WMS,以便WMS反向通知ViewRoot的接口。由于ViewRoot處在application端,而WMS處在system_server進(jìn)程,它們處在不同的進(jìn)程間,因此需要添加這個(gè)IWindow接口便于GUI繪制狀態(tài)的同步。
原文地址:?http://blog.csdn.net/windskier/article/details/6957901
總結(jié)
以上是生活随笔為你收集整理的android的窗口机制分析------ViewRoot类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android的窗口机制分析------
- 下一篇: android的窗口机制分析------