Android系统窗口管理机制简介

本文介绍了Android系统的窗口管理机制,由WindowManagerService(WMS)负责,包括窗口的概念、WMS的启动过程、窗口的添加和删除。WMS在启动时涉及窗口创建、显示准备以及与SurfaceFlinger的协作,同时管理窗口的Z-order、焦点窗口和输入法窗口等。文章以Activity窗口的添加为例,阐述了如何通过AppWindowToken与WMS交互。
摘要由CSDN通过智能技术生成

一、概述


Android系统窗口管理是由WindowManagerService负责实现的.WindowManagerService(后面简称WMS)的代码位于

frameworks/base/services/java/com/android/server/wm/WindowManagerService.java.

什么是窗口?

窗口就是屏幕上的一块矩形区域,可以显示UI和与用户交互.常见的比如:Dialog,Activity界面,状态栏、Toast界面.站在系统的角度来说,

窗口其实是一个Surface(画布).一个屏幕有多个窗口,而这多个窗口的布局和顺序以及窗口动画是由WMS管理的,然后由一个叫SurfaceFlinger的服务来对多个画布内容混合和显示出来.

WMS和SurfaceFlinger的关系如下图


图中的Z轴大小就是不同窗口显示的顺序,在Android里叫Z-order.SurfaceFlinger将多块Surface的内容按照Z-order进行混合并输出到FrameBuffer(帧缓冲).


二、WMS的启动


和AMS、PMS一样,WMS也是在SystemServer的initAndLoop方法里启动的.

主要有3个阶段:

1.创建WMS

2.做显示准备工作

3.SystemServer启动之后通知WMS


先看第一个阶段

1.创建WMS

wm = WindowManagerService.main(context, power, display, inputManager, wmHandler, factoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL, !firstBoot, onlyCore);
ServiceManager.addService(Context.WINDOW_SERVICE, wm);

新建WMS实例,然后往ServiceManager注册WMS.

看下main方法

public static WindowManagerService main(final Context context, final PowerManagerService pm, final DisplayManagerService dm, final InputManagerService im, final Handler wmHandler, final boolean haveInputMethods, final boolean showBootMsgs, final boolean onlyCore) {
		final WindowManagerService[] holder = new WindowManagerService[1];
		wmHandler.runWithScissors(new Runnable() {
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值