android UI結構 (1)Activity 與 Window
Android PhoneWindow,ViewRoot,Activity之間的大致關係。
在android裡,我們都知道activity.但是一個activity跟一個Window是一個什麼關係呢?
在activity.java中,我們可以看到兩個變數,分別是:
private Window mWindow;
private WindowManager mWindowManager;
這這個變數是在哪裡賦值的呢?可以看到attach函式,
mWindow = PolicyManager.makeNewWindow(this);
跟進去看一下,可以發現返回的時候一個PhoneWindow物件,PhoneWindow是Window類的派生類。
mWindow.setWindowManager(null, mToken, mComponent.flattenToString());
if (mParent != null) {
mWindow.setContainer(mParent.getWindow());
}
mWindowManager = mWindow.getWindowManager();
仔細跟蹤下這段程式碼中我們可以得到WindowManager物件,並且這個物件是在系統唯一的,這個物件同樣被賦值給PhoneWindow的成員變數。
我們在新建一個activity的時候,往往喜歡用如下的程式碼來定義該activity的UI介面,那麼這個具體的實現是怎麼來實現的呢?
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
我們跟蹤setContentView就知道了。可以發現activity其實把這個操作交給了自己的mWindow來完成,通過跟蹤PhoneWindow中的setContentView函式可以得出以下知識:
1,每一個PhoneWiondow中都有一個叫DecorView的物件,該物件是該PhoneWiondow的框架view,可以找到這麼一段程式碼:
View in = mLayoutInflater.inflate(layoutResource, null);
decor.addView(in, new ViewGroup.LayoutParams(FILL_PARENT, FILL_PARENT));
該layoutResource則是資源ID,通過往上翻程式碼就可以找得到。
2,一個PhoneWiondow中都有一個叫FrameLayout的物件mContentParent,該物件是從上述layoutResource中的佈局xml中獲得的,這也將是activity中所有使用者新增加view都會被包含在這個物件當中。
總體可以這樣大致說明:一個activity包含有一個PhoneWiondow物件,而所有的UI部件都是放在PhoneWiondow中。
相關文章
- Android的Activity啟動與子執行緒更新UIAndroid執行緒UI
- Android 中MVC例項之Activity,Window和ViewAndroidMVCView
- Android知識點複習1(Activity與Fragment)AndroidFragment
- Android 中Activity,Window和View之間的關係AndroidView
- Android技能樹 — Activity小結Android
- Android之Window與WindowManagerAndroid
- android UI結構 (2)ViewRoot的橋樑作用AndroidUIView
- Android :“萬能” Activity 重構篇Android
- 複雜 Activity UI 介面模組化重構實踐UI
- android Activity的onPause()與onResume()Android
- Android程式的結構---重新認識Android(1)Android
- Android程式啟動與Activity顯示Android
- ()Android中的Activity建立與週期Android
- Android UI效果篇-(1)RippleAndroidUI
- Android ActivityAndroid
- Activity、View、Window之間關係的分析View
- Activity啟動分析(二)--建立Window和ViewView
- 完全理解android Activity啟動模式LauchMode (深入Activity與任務棧)Android模式
- Android 之 Window、WindowManager 與視窗管理Android
- android 團隊開發技巧1 - activity 啟動Android
- Android Starting Window(Preview Window)AndroidView
- 資料結構與集合之(1)ArrayList 與 Arrays資料結構
- 資料結構與演算法(1)資料結構演算法
- 1.入門與順序結構
- android Fragments詳解五:與activity通訊AndroidFragment
- android-Activity Intent.setFlags()與launchModeAndroidIntent
- Android開發中如何結束所有的activityAndroid
- Android之ActivityAndroid
- Android-Window(一)——初識WindowAndroid
- 學與思1——控制單元與大腦結構?
- Android學習之 Activity堆疊管理與控制Android
- Android技能樹 - Rxjava原始碼(1) 之 初步結構AndroidRxJava原始碼
- .NET Core 資料結構與演算法 1-1資料結構演算法
- 底層剖析 Window 、Activity、 View 三者關係View
- Android 基礎 -- Activity 生命週期實踐總結Android
- Activity 知識梳理(1) Activity生命週期
- Android UI 顯示原理分析小結AndroidUI
- Android總結1Android