Files
mkdocs/docs/android面试/系统原理/WMS原理.md
2026-01-15 11:53:37 +08:00

141 lines
2.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# WMS原理
## 目录
- [WMS架构](#wms架构)
- [窗口管理](#窗口管理)
- [窗口类型](#窗口类型)
- [窗口层级](#窗口层级)
- [WMS源码分析](#wms源码分析)
- [面试常见问题](#面试常见问题)
---
## WMS架构
### WMS 简介
```java
// WMSWindow Manager Service
// 管理所有窗口的显示、层级、动画等
// 系统服务,运行在 system_server 进程
```
### WMS 职责
```java
// 1. 窗口管理
// 2. 窗口层级管理
// 3. 窗口动画
// 4. 输入事件分发
// 5. 屏幕旋转
```
---
## 窗口管理
### 窗口创建
```java
// Activity 创建窗口
// 1. Activity.attach()
// 2. PolicyManager.makeNewWindow()
// 3. Window.setWindowManager()
// 4. WindowManager.addView()
```
### 窗口添加
```java
// WindowManager.addView()
WindowManager wm = getWindowManager();
View view = LayoutInflater.from(this).inflate(R.layout.view, null);
WindowManager.LayoutParams params = new WindowManager.LayoutParams();
wm.addView(view, params);
```
---
## 窗口类型
### 窗口类型
```java
// 1. APPLICATION应用窗口
WindowManager.LayoutParams.TYPE_APPLICATION
// 2. SUB_WINDOW子窗口
WindowManager.LayoutParams.TYPE_APPLICATION_PANEL
// 3. SYSTEM_WINDOW系统窗口
WindowManager.LayoutParams.TYPE_SYSTEM_ALERT
WindowManager.LayoutParams.TYPE_TOAST
```
---
## 窗口层级
### 层级管理
```java
// Z-Order窗口层级
// 数字越大,层级越高
// 窗口层级:
// 1. 系统窗口:最高
// 2. 应用窗口:中等
// 3. 子窗口:最低
```
---
## WMS源码分析
### 关键类
```java
// WindowManagerServiceWMS 主类
// WindowState窗口状态
// WindowToken窗口令牌
// DisplayContent显示内容
```
### 关键方法
```java
// addWindow():添加窗口
// removeWindow():移除窗口
// relayoutWindow():重新布局窗口
```
---
## 面试常见问题
### Q1: WMS 的作用?
**答案:**
- 管理所有窗口
- 管理窗口层级
- 处理窗口动画
- 分发输入事件
### Q2: 窗口类型?
**答案:**
1. APPLICATION应用窗口
2. SUB_WINDOW子窗口
3. SYSTEM_WINDOW系统窗口
### Q3: 窗口层级?
**答案:**
- 系统窗口:最高
- 应用窗口:中等
- 子窗口:最低
---
*最后更新2024年*