核心關係
Activity 不是 Window 的子類,而是持有 Window 實例 (組合關係)。
關鍵點
- Window 抽象視窗容器:`PhoneWindow` (唯一實現) 管理 `DecorView` (根佈局)、`ActionBar`、輸入法窗口等。
- Activity 委託 Window:`setContentView()` → `getWindow().setContentView()`;`requestWindowFeature()` → `getWindow().requestFeature()`;`getWindowManager()` → `getWindow().getWindowManager()`。
- 生命週期綁定:`onCreate` 時創建 Window,`onDestroy` 時銷毀。
- 為什麼能直接調 Window 方法?:Activity 封裝了常用代理方法 (如 `setTitle()`、`setContentView()`、`getWindow()`),內部轉發給 `mWindow`。
源碼證據 (Activity.java)
private Window mWindow;
public Window getWindow() { return mWindow; }
public void setContentView(@LayoutRes int layoutResID) {
getWindow().setContentView(layoutResID);
initWindowDecorActionBar();
}
深度閱讀建議
推薦任玉剛《Android 開發藝術探究》第 1 章「Activity 的生命週期與啟動模式」及第 4 章「View 的繪製流程」,詳細講解 Window、DecorView、ViewRootImpl 協作機制。