WindowManagerService简述(1)

WindowManagerService简述(1)

简述

Android的系统服务都是运行在SystemServer里的,和GUI直接相关的主要是ActivityManagerService(后面就简称AMS)和WindowManagerService(后面就简称WMS),我们先来研究WMS,了解WMS后对学习AMS会有比较大的帮助,而且我们之前才看完SurfaceFlinger,WMS和SurfaceFlinger的关系比较紧密。
看完之前SurfaceFlinger章节后我们知道,SurfaceFlinger就是对一些layer上的内容进行合成,形成最终上屏的图像。一个layer其实就是一个窗口,SurfaceFlinger的核心作用主要是合成,Framework里需要一个模块对这些窗口进行管理,比如说层级调整,窗口大小位置控制等等,这个模块就是WMS。

前言

在正式开始学习之前,我先分享一些自己学习Framework对心得。一开始我也是做应用开发的,后面开始看Framework的代码一开始也是看的云里雾里,看了半天不知道到底要干啥,感觉主要原因一方面是Framework的资料不像app那样多,另一方面是Framework比较抽象,不像应用有界面,很容易就能理解代码逻辑是要干什么,还有一个原因是Framework的代码很多,一个函数跟下去可能引用到了好多模块,如果全部看肯定看不完,如果都不看一个流程看下来感觉跟啥也没看一样。
我自己看代码的经验主要是以下几点:

  • 1.学习一个流程前,要先搞清楚核心的数据结构,了解这个模块的大体框架,然后再去详细看代码。(同时看流程时也需要有类的思想,想一下每个类是做什么的)
  • 2.虽然我们一般看流程跟着函数方法一直往下走,但是Framework还是用java写的,我们还是需要有面向对象的思想。遇到核心的类还是要通过看一下他有哪些变量方法来了解这个类的作用。
  • 3.最后还是要沉得下心,看框架代码最好是要有比较大段的时间,慢慢看,不能太心急跳着看,往往跳过一些关键点就会完全看不懂然后反而花费大把时间思考。

窗口简述

WMS是窗口管理服务,窗口这个概念对应用开发者比较陌生,因为Android对应用开发是屏蔽了这个概念,应用开发者接触到的是Activity,一个Activity会有一个窗口,dialog是一个子窗口,type不同,做应用开发的同学们可能知道,在service里用context去构建对话框会报错,就是因为对话框作为一个子窗口必须要有一个父窗口(就是Activity)。当然service里面也是可以构建对话框的,只不过type不同,是一个悬浮窗类型的窗口。还有很多种type的窗口,使用过addView这个接口的话应该就是接触过一些窗口type,后面我们也会介绍这个流程。

WMS就是管理窗口位置,层次结构等等,比如app创建Activity的时候,就需要添加一个窗口;app有Task之类的结构层级,这些结构就是通过WMS的窗口树实现的,可以想像到AMS对WMS的依赖也很多,这也是我们先看WMS后面再看AMS到原因。

本章涉及内容

  • WMS 核心数据结构
  • WMS 窗口树结构初始化过程
  • WMS 添加窗口过程
  • WMS Inset
  • WMS核心函数relayoutWindow
  • WMS 窗口动画
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值