日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Activity、View、Window、DecorView的关系

發(fā)布時間:2025/4/16 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Activity、View、Window、DecorView的关系 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

android中真正展示給用戶的是window和view,activity在android中所的作用主要是處理一些邏輯問題,比如生命周期的管理、建立窗口等。在android中,窗口的管理還是比較重要的一塊,因為他直接負(fù)責(zé)把內(nèi)容展示給用戶,并和用戶進(jìn)行交互。響應(yīng)用戶的輸入等。 View是真正顯示的矩形區(qū)域,DecorView是頂層View,也就是主View。 相互之間的關(guān)系可以理解為一個Activity包含了一個Window,這個Window其實是一個PhoneWindow,在PhoneWindow中包含了DecorView,變量名稱為mDecor,mDecor有一個子View,這個子View的布局方式根據(jù)設(shè)定的主題來確定,在這個子View的xml布局中包含了一個FrameLayout元素,這個FrameLayout元素的id為content,這個content對應(yīng)于PhoneWindow中的mContentParent變量,用戶自定義的布局作為mContentParent的子View存在,一般情況下mContentParnet只有一個子View,如果在Activity調(diào)用addView方式實際上是給PhoneWindow中的mContentParent添加子View,由于mContentParent是一個FrameLayout,因此新的子view會覆蓋通過setContentView添加的子view。僅通過setContentView添加子View類View層次與下圖類似:

(上面的FrameLayout和TextView應(yīng)該是標(biāo)題欄,不一定有)。
通過addView方式給Activity添加子view層次圖如下所示,右下角兩個LinearLayout為用戶自定義的布局:

Android 的窗口管理是基于 C/S 模式的,客戶端就是應(yīng)用程序,服務(wù)端就是 Window Manager服務(wù)。

Activity建立一個主窗口之后,在將主窗口添加到WindowManager 時,首先要建立WindowManager的代理對象,并打開一個Session(session:會話;該session由上面函數(shù)中的第二行代碼實現(xiàn),實現(xiàn) IWindowSession AIDL 接口),并維持該會話(Activity將通過該會話與WindowManager 建立聯(lián)系,這個Session 是C/S 體系的基礎(chǔ))。Client通過這個Session將window加入到WindowManager中。

public static IWindowSession getWindowSession(Looper mainLooper) { InputMethodManager imm = InputMethodManager.getInstance(mainLooper); //獲取回話Session,ViewRoot和Window manager通信, return sWindowSession = IWindowManager.Stub.asInterface(ServiceManager.getService("window")) .openSession(imm.getClient(), imm.getInputContext()); }

一個完整的窗口概念包含了 View,ViewRoot,Window Manager Service,Window,Decor View,IWindow,ISession,WindowState。他們之間的關(guān)系如下:

Client 端的 Activity 通過 IWindowSession 會話與Window Manager Service 建立對話,而 Window Manager Service 通過 IWindow 接口訪問 Client,將消息傳遞到Client 端,在通過消息分發(fā)渠道,將消息傳遞到具體的消息處理函數(shù)。(用戶輸入等操作最先是到窗口管理服務(wù),由窗口管理服務(wù)發(fā)給活動窗口,再一步步傳遞到焦點(diǎn))。

通過IWindowSession機(jī)制就可以保證Activity和Window manager保持聯(lián)系,通過IWindow可以將window manager收集到的消息分發(fā)出去。

總結(jié)

以上是生活随笔為你收集整理的Activity、View、Window、DecorView的关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。