Android Framework底层原理——WMS机制

WMS是Android系统中窗口管理服务,负责窗口的创建、删除、修改及焦点窗口管理。它管理Surface分配,控制窗口显示顺序、尺寸和位置,处理窗口动画和输入事件转发。Window是View的容器,通过WindowManager与WMS交互。文章详细阐述了WMS在Activity渲染、Dialog显示等场景的应用,以及窗口添加、删除的流程,并探讨了WMS启动、与其它系统服务的交互等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

快速了解WMS机制

WMS是什么

  • 开发中各种UI显示异常的bug都可以在WMS体系中找到对应的解决办法和对应原理。
    • 因为WMS管理着所有的窗口,包括创建、删除和修改,以及将某个窗口设置为焦点窗口。
  • WMS(WindowManagerService)相关概念
    • Window:它是一个抽象类,具体实现类为 PhoneWindow ,它对 View 进行管理。Window是View的容器,View是Window的具体表现内容;
    • WindowManager:是一个接口类,继承自接口 ViewManager ,从它的名称就知道它是用来管理 Window 的,它的实现类为 WindowManagerImpl;
    • WMS:是窗口的管理者,它负责窗口的启动、添加和删除。另外窗口的大小和层级也是由它进行管理的;

应用于那些场景

  • Activity页面渲染
    • Activity 启动后就可以看到我们写的 Layout 布局界面,Activity 从 setContentView() 加载布局到Window上,这个过程就涉及到WMS。
  • Dialog弹窗渲染
    • 创建Dialog后,会去创建Window窗口,然后通过addView形式将视图添加到窗口上。这个过程就涉及到WMS。
  • 可以解决那些问题
    • 如果你的定位是做界面开发,那么界面怎么来的?如何显示的?如何布局?如何渲染……要明白这些问题,WMS就是你必须掌握的内容。

WMS主要功能

  • 主要功能

    • Surface管理。为所有窗口分配Surface,客户端向WMS添加一个窗口的过程,其实就是WMS为其分配一块Surface的过程,一块块Surface在WMS的管理下有序的排布在屏幕上。Window的本质就是Surface。
    • 管理窗口的显示顺序、尺寸、位置, 最终都会反馈SurfaceFlinger。
    • 窗口动画, 包括进入,退出动画
    • 输入系统中转站:WMS是派发系统按键和触摸消息的最佳人选,当接收到一个触摸事件,它需要寻找一个最合适的窗口来处理消息,而WMS是窗口的管理者,系统中所有的窗口状态和信息都在其掌握之中,完成这一工作不在话下。
  • 主要功能图

Window是什么

  • Window是什么?
    • 表示一个窗口的概念,是所有View的直接管理者,任何视图都通过Window呈现(点击事件由Window->DecorView->View; Activity的setContentView底层通过Window完成)
    • Window是一个抽象类,具体实现是PhoneWindow。这个可以看Activity#attach方法源码
    • 创建Window需要通过WindowManager创建,WindowManager是外界访问Window的入口,Window具体实现位于WindowManagerS
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值