首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Android Activity 與 Window 關係解析

     編輯:程式設計疑難解答

核心關係

Activity 不是 Window 的子類,而是持有 Window 實例 (組合關係)。

關鍵點

  1. Window 抽象視窗容器:`PhoneWindow` (唯一實現) 管理 `DecorView` (根佈局)、`ActionBar`、輸入法窗口等。
  2. Activity 委託 Window:`setContentView()` → `getWindow().setContentView()`;`requestWindowFeature()` → `getWindow().requestFeature()`;`getWindowManager()` → `getWindow().getWindowManager()`。
  3. 生命週期綁定:`onCreate` 時創建 Window,`onDestroy` 時銷毀。
  4. 為什麼能直接調 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 協作機制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved