前言

本章主要从上面几个角度来讲解 WindowManagerService;
相关概念
介绍 WMS 之前,我们先来介绍几个相关的概念;
WMS 存在于 system_server 系统服务进程,view 存在于 app 进程,所有的窗口最终都是通过 wms 来进行管理,为了方便管理,app 和 wms 之间添加了 WindowManager,用来在应用与 wms 之间的管理接口,管理窗口顺序,消息等。
Activity 与 Window 相关概念
- Activity 只负责生命周期和事件处理;
- Window 只控制视图;
- 一个 Activity 包含一个 Window,如果 Activity 没有 Window,那就相当于 Service;
- AMS 统一调度所有应用程序的 Activity;
- WMS 控制所有 Window 的显示与隐藏以及要显示的位置;
Window
『Window』表明它是和窗口相关的,“窗口”是一个抽象的概念,从用户的角度来讲,它是一个“界面”;从SurfaceFlinger 的角度来看,它是一个 Layer,承载着和界面有关的数据和属性;从 WMS 角度来看,它是一个WindowState,用于管理和界面有关的状态;添加一个 Window 的过程,就是分配一块 Surface 的过程;
- 表示一个窗口的概念,是所有 View 的直接管理者,任何视图都通过 Window 呈现(点击事件由 Window->DecorView->View; Activity 的 setContentView 底层通过 Window 完成);
- Window是一个抽象类,具体且唯一的实现是 PhoneWindow;
- 创建 Window 需要通过 WindowManager 创建;
- WindowManager 是外界访问 Window 的入口;
- Window 具体实现位于 WindowManagerService 中;
- WindowManager 和 WindowManagerService 的交互是通过 IPC 完成;
- 定义窗口样式和行为的抽象基类,用于作为顶层的 view 加到 WindowManager 中,其实现类是 PhoneWindow
- 每个 Window 都需要指定一个 Type(应用窗口、子窗口、系统窗口)。Activity 对应的窗口是应用窗口;PopupWindow,ContextMenu,OptionMenu 是常用的子窗口;像 Toast 和系统警告提示框(如ANR)就是系窗口,还有很多应用的悬浮框也属于系统窗口类型;

Android上对 Window 进行了弱化,主要是 View;
WindowManager
用来在应用与window之间的管理接口,管理窗口顺序,消息等;
WindowManagerService
简称 WMS,WindowManagerService 管理窗口的创建、更新和删除、显示顺序等,是 WindowManager 这个管理接口的真正的实现类。它运行在 system_server 进程,作为服务端,客户端(应用程序)通过 IPC 调用和它进行交互;
- Z-ordered的维护函数;
- 输入法管理;
- AddWindew/RemoveWindow;
- Layout;

最低0.47元/天 解锁文章
1408





