WMS-relayoutwindow

6 relayoutWindow                              

wms的relayoutWindow方法会在ViewRootImpl的performTraversals方法中会调用,其请求WMS来计算相关的窗口大小,创建Surface等等,就目前的理解performTraversals主要侧重于客户端对DecorView及其子View的measure,layout,draw等三大流程的处理;而binder call到system_server的WMS,是着重于系统侧对窗口的处理,而wms端主要调用performSurfacePlacement方法来管理surface,创建surfacecontrol.

调用堆栈为:

WMS-relayoutwindow_第1张图片

当满足条件时,ViewRootImpl就会调用relayoutwindow方法,代码如下:

WMS-relayoutwindow_第2张图片

WMS-relayoutwindow_第3张图片

  接着会调用wms的reloutWindow方法,传入的参数意义如下:

session:调用者所在进程的Session实例。

client::要进行 relayout 的窗口。

seq: —个和状态栏/导航栏可见性相关的序列号attrs:窗口的新布局属性。

attrs:relayoutWindow()的主要目的就是根据attrs所提供的布局 参数重新布局一个窗口。客户端可以通过relayoutWindow()函数改变attrs中所定义的 几乎所有布局属性。但是唯独无法改变窗口类型。

requestedWidth与requestedHeight:客户端所要求的窗口尺寸。在重新布局的过程中, WMS会尽贵将窗口的尺寸布局为客户端所要求的大小。

viewVisiblility:窗口的可见性。

flags:定义一些布局行为。

outFrame :由relayoutWindow()函数返回给调用者的一个Rect类型的实例.它保存了 窗U被重新布局后的位置与大小UoutContentlnsets与outVisiblelnsets:这两个参数表示了窗口可以绘制内容的矩形边界 与可视矩形边界在四个方向上到mFrame的像素差。

outConfiguration:重新布局后,WMS为此窗口计算出的Configuration。

outSurface:用来接收WMS为此窗口分配的Surface。窗口的第一次relayout完成后就 可以通过它在窗口中进行绘图了。

relayoutWindow方法主要执行的功能如下:

WMS-relayoutwindow_第4张图片

 

7 点击应用后执行的流程

WMS-relayoutwindow_第5张图片

 

8参考文档

https://blog.csdn.net/itachi85/article/details/78186741

http://liuwangshu.cn/framework/booting/3-syetemserver.html

https://blog.csdn.net/u010664697/article/details/103684273

https://blog.csdn.net/Rain_9155/article/details/88829992

 

你可能感兴趣的:(Android,WMS)