### 參考文章
[Android應用程序窗口(Activity)](http://www.hmoore.net/alex_wsc/androids/473768)
[簡述Activity與Window關系](http://www.hmoore.net/alex_wsc/androidsystem/483890)
[Android群英傳之Android控件結構與自定義控件詳解](http://www.hmoore.net/alex_wsc/heros/156870)


### View是如何被添加到屏幕窗口上的
* 創建頂層布局容器DecroView
* DecorView是一個ViewGroup容器,寄存FrameLayout,是PhoneWindow的一個實例,是所有應用程序的頂層View,在系統內部進行初始化,當DecorView初始化完成后,系統會根據應用程序的主題特性(比如線性布局或者相對布局等特性)去加載一個基礎容器(比如NoActionBar或者DarkActionBar),不同的主題,加載的基礎容器也不一樣,但是無論如何,在基礎容器里面都有一個`com.android.internal.R.id.content`的容器,它是一個FrameLayout,
* 在頂層不居中加載基礎布局ViewGroup
* 將ContentView添加到基礎布局中的FrameLayout中
* 開發者通過`setContentView`自己編寫的布局xml文件 經過解析之后被添加到了這樣一個FrameLayout中
### View的繪制流程
* 繪制入口
```
ActivityThread.handleResumeActivity
-->WindowManagerImpl.addView(decorView,layoutParams)
-->WindowManagerGlobal.addView()
```
* 繪制的類及方法
```
ViewRootImpl.setView(decorView,layoutParams, parentView)
-->ViewRootImpl.requestLayout()-->scheduleTraversals()-->doTraversal()-->performTraversals()
```
* 繪制三大步驟
```
測量:ViewRootImpl.performMeasure
布局:ViewRootImpl.performLayout
繪制:ViewRootImpl.performDraw
```
如下圖所示

#### **Viewde測量**——確定DecroView的MeasureSpec
* DecroView的MeasureSpec由窗口大小和自身LayoutParams決定,遵守如下規則:
1. LayoutParams.match_parent:精確模式,窗口大小
2. LayoutParams.wrap_content:最大模式,最大為窗口大小
3. 固定大小:精確模式,大小為LayoutParams的大小
#### **View的布局**
* 調用view.layout確定自身的位置,即確定mLeft,mTop,mRight,mBottom的值
* 如果是ViewGroup類型,需要調用onLayout確定子View的位置
- 前言
- Android系統的體系結構
- Dalvik VM 和 JVM 的比較
- Android 打包應用程序并安裝的過程
- Android ADB工具
- Android應用開發
- Android UI相關知識總結
- Android 中window 、view、 Activity的關系
- Android應用界面
- Android中的drawable和bitmap
- AndroidUI組件adapterView及其子類和Adapter的關系
- Android四大組件
- Android 數據存儲
- SharedPreference
- Android應用的資源
- 數組資源
- 使用Drawable資源
- Material Design
- Android 進程和線程
- 進程
- 線程
- Android Application類的介紹
- 意圖(Intent)
- Intent 和 Intent 過濾器(Google官網介紹)
- Android中關于任務棧的總結
- 任務和返回棧(官網譯文)
- 總結
- Android應用安全現狀與解決方案
- Android 安全開發
- HTTPS
- 安卓 代碼混淆與打包
- 動態注入技術(hook技術)
- 一、什么是hook技術
- 二、常用的Hook 工具
- Xposed源碼剖析——概述
- Xposed源碼剖析——app_process作用詳解
- Xposed源碼剖析——Xposed初始化
- Xposed源碼剖析——hook具體實現
- 無需Root也能Hook?——Depoxsed框架演示
- 三、HookAndroid應用
- 四、Hook原生應用程序
- 五、Hook 檢測/修復
- Android 應用的逆向與加固保護技術
- OpenCV在Android中的開發
- Android高級開發進階
- 高級UI
- UI繪制流程及原理
- Android新布局ConstraintLayout約束布局
- 關鍵幀動畫
- 幀動畫共享元素變換
- Android異步消息處理機制完全解析,帶你從源碼的角度徹底理解
- Android中為什么主線程不會因為Looper.loop()里的死循環卡死?
- 為什么 Android 要采用 Binder 作為 IPC 機制?
- JVM 中一個線程的 Java 棧和寄存器中分別放的是什么?
- Android源碼的Binder權限是如何控制?
- 如何詳解 Activity 的生命周期?
- 為什么Android的Handler采用管道而不使用Binder?
- ThreadLocal,你真的懂了嗎?
- Android屏幕刷新機制