欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 高考 > 安卓WMS层面分析窗口的位置变化-安卓framework实战开发

安卓WMS层面分析窗口的位置变化-安卓framework实战开发

2025/5/1 21:47:23 来源:https://blog.csdn.net/learnframework/article/details/141428831  浏览:    关键词:安卓WMS层面分析窗口的位置变化-安卓framework实战开发

背景:

在悬浮窗口开发过程中,窗口往往都不是铺满整个屏幕,一般都是一个小窗口,这个时候往往会加上一个自由拖动的功能,例如如下图所示:
在这里插入图片描述
毫秒表就可以上下自由移动,那么大家有没有想过这个自由移动功能是如何实现的呢?原理到底是啥呢?

窗口位置变化dumpsys分析:

首先针窗口想过位置移动,最先想到应该是通过dumpsys window windows和dumps SurfaceFlinger来查看
dumpsys window windows
在这里插入图片描述在这里插入图片描述可以看到这里的mAttrs的Y值都变大的。

dumpsys SurfaceFlinger来看看情况
在这里插入图片描述
在这里插入图片描述可以看到sf的layer中也是可以看出图层是有y方向的位移

上面就得出了window移动实际就是sf的layer中matrix有位移的变化,从而可以移动窗口,本质就是对surfacecontrol进行了位移设置。

应用修改窗口位置代码:

在这里插入图片描述
可以看到主要是通过mWindowManager.updateViewLayout改变WindowManager.LayoutParams 的x,y的值

那么这个updateViewLayout又是如何体现到上面的SurfaceFlinger的Layer中呢?

追踪如何影响到SurfaceControl

首先可以从SurfaceControl开始打堆栈:
在这里插入图片描述打印如下

在这里插入图片描述

可以看出是windowstate的updateSurfacePosition触发的SurfaceControl位置变化
frameworks/base/services/core/java/com/android/server/wm/WindowState.java
在这里插入图片描述
在这里插入图片描述
可以看到这里实际上是mSurfacePosition的值作为最后影响,接下来看看mSurfacePosition谁影响的。

在这里插入图片描述
可以看到主要是这里transformFrameToSurfacePosition会对它进行设置

在这里插入图片描述
主要靠mWindowFrames.mFrame这个参数影响,那么这个mWindowFrames.mFrame又是哪里来的?
这里就是setFrames方法
在这里插入图片描述
那么setFrames又是谁调用的呢?
看看如下堆栈
在这里插入图片描述
上面堆栈就展示的非常清楚,主要核心流程就是如下:
在这里插入图片描述
这里核心就是layoutWindowLw方法来计算的
在这里插入图片描述
layoutWindowLw核心就是如下这个计算方法

 mWindowLayout.computeFrames(attrs, win.getInsetsState(), displayFrames.mDisplayCutoutSafe,win.getBounds(), win.getWindowingMode(), requestedWidth, requestedHeight,win.getRequestedVisibleTypes(), win.mGlobalScale, sTmpClientFrames);

这里有attrs里面带了relayout传递来的值,在computeFrames会使用它进行计算最后影响mWindowFrames.mFrame值,computeFrames方法就不展开了,可以去frameworks/base/core/java/android/view/WindowLayout.java查看。

投屏专题部分:
https://mp.weixin.qq.com/s/IGm6VHMiAOPejC_H3N_SNg

更多framework详细代码和资料参考如下链接

hal+perfetto+surfaceflinger

https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

参考相关链接:
https://blog.csdn.net/zhimokf/article/details/137958615

更多framework假威风耗:androidframework007

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词