![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Android WMS
文章平均质量分 73
windowManagerService
binghaiwlf
这个作者很懒,什么都没留下…
展开
-
Surface创建(一)
1.Surface相关术语介绍1.1 SurfaceSurface 就是由屏幕显示内容合成器(screen compositor)所管理的原生缓冲器的句柄,1)可以通过Surface获得原生缓冲器以及当中的内容。2)原生缓冲器(rawbuffer)是用于保存当前使用surface的像素数据的Surface是用来绘制图形或者图片的载体,在其中包含Canvas,获取canvas对象即可对其进行绘制。3)Surface中有一个Canvas成员,专门用于画图的。所以,Surface中的C原创 2020-08-13 10:02:03 · 1661 阅读 · 0 评论 -
Surface创建(二)
3.Surface创建总结surface的创建已经分析,从App点击启动一个MainActivity来介绍此流程3.1 APP/WMS/SurfaceFlinger通信流程创建App启动Main Activity: 首先创建好与WMS通信的媒介Session, 然后通过Session将Window加入到WMS中,这时会触发 SurfaceSession的创建 SurfaceSession的创建又会在WMS Native创建SurfaceComposerClient,原创 2020-08-13 10:01:46 · 1525 阅读 · 0 评论 -
WMS-relayoutwindow
6 relayoutWindowwms的relayoutWindow方法会在ViewRootImpl的performTraversals方法中会调用,其请求WMS来计算相关的窗口大小,创建Surface等等,就目前的理解performTraversals主要侧重于客户端对DecorView及其子View的measure,layout,draw等三大流程的处理;而binder call到system_server的WMS,是着重于系统侧对窗口的处...原创 2020-07-31 15:05:38 · 961 阅读 · 0 评论 -
WMS-addWindow
原创 2020-07-31 15:04:33 · 302 阅读 · 0 评论 -
Window窗口添加
5 Window窗口的添加WindowManager对Window进行管理,说到管理那就离不开对Window的添加、更新和删除的操作,在这里我们把它们统称为Window的操作。对于Window的操作,最终都是交由WMS来进行处理。窗口的操作分为两大部分,一部分是WindowManager处理部分,另一部分是WMS处理部分。我们知道Window分为三大类,分别是:Application Window(应用程序窗口)、Sub Windwow(子窗口)和System Window(系统窗口),对于不同类型的窗原创 2020-07-31 15:00:03 · 452 阅读 · 0 评论 -
WMS窗口管理模式
4 WMS窗口管理模式在wms中对所有的窗口采取树状的形式管理,示意图如下:从8.0上,引入了WindowContainer 的概念,如上图所示,将Window通过树状的形式来管理下面的类对应的就是上图中的类DisplayContent extends WindowContainerRootWindowContainer extends WindowContainerTaskStack extends WindowContainerTask extends WindowCo.原创 2020-07-31 15:03:12 · 547 阅读 · 0 评论 -
WMS初始化
3 WMS初始化 调用WindowManagerService的main方法来创建wms的实例,此方法执行在system_server线程中代码如下: 通过wms的构造函数中看到,wms主要涉及的功能如下图所示: 而在wms的初始化过程中主要涉及到如下三个线程,分别是”system_server”、”android.display”和”android.ui”,这三个线程的关系如下: AndroidO以下三个...原创 2020-07-31 15:02:38 · 219 阅读 · 0 评论 -
WMS服务启动流程
2 WMS服务启动流程 wms(WindowManagerService)属于一种系统服务,类似的服务为AMS,PMS,IMS等,是在SystemServer中被启动。启动wms服务的流程如下: 2.1 Zygote启动systemserver 由结构图的得知,在ZygoteInit.java的forkSystemServer函数中启动了SyetemServer进程,代码如下:2.2 systemserver进程启动过程handleSystemSe...原创 2020-07-31 10:22:12 · 1149 阅读 · 0 评论 -
WMS总体框架
目录1 WMS总体架构........................................................................................ 32 WMS服务启动流程................................................................................ 53 WMS初始化................................................原创 2020-07-31 10:21:21 · 1982 阅读 · 0 评论 -
计算窗口大小(二)
performTraversal调用relayoutWindow方法分析在performTraversal,会涉及到View的measure、layout、draw。其中measure用来对View进行测量,给出建议值,layout来确定子控件在父控件中的位置,包括真实大小以及坐标位置,draw负责将View绘制出来。单文只分析与窗口大小相关的逻辑,performTraversal方法会被多次调用到,这个方法是计算窗口大小的起点窗口区域Overscan(过扫描区): Ov..原创 2020-07-31 15:32:37 · 1766 阅读 · 0 评论 -
WMS窗口大小计算(一)
本文以打开一个Activity后,到Activity显示后,如何确认各个窗口的大小和位置。不涉及到窗口中的每个view的布局的情况。一个Activity包含了一个PhoneWindow(window),一个Window代表一个窗口。 Activity并不负责视图控制,只是控制其生命周期和处理事件,真正控制视图的是Window。但Window的添加和显示又与生命周期息息相关。 在android系统中,一个window界面上出来Activity显示的界面外,至少还可能有如下的元素:...原创 2020-08-13 10:01:25 · 736 阅读 · 0 评论 -
AndridQ 多屏添加NavbarWindow
Android Q上支持多屏显示,当连接另一个屏幕后,会调用OnDisplayReady代码如下:接着调用creatNavigationBar,会根据wms是否支持navbar来判读是否需要在另一屏添加navbarBar...原创 2020-04-16 20:40:38 · 179 阅读 · 0 评论