Winscope重要干货知识点RelativeLayer相关的查看方式

背景:

通过之前学习马哥的wms专题中的winscope详细分析,在经常使用winscope查看某些层级顺序时候,经常查看的方式如下图所示:

在这里插入图片描述
这里可以看到正常NavigationBar0图层显示在最顶部部分,对应的图层层级肯定也最高。
正常情况下确实是按照上面的方式去查看的,但是也会有对应的另外特殊情况,比如SurfaceView情况,明显看着是SurfaceView的这些图层图层应该是比Activity的要高,而且从画面画面也可以看出来确实是这样:
在这里插入图片描述

那么实际真的是SurfaceView在Activity上面么?

dumpsys SurfaceFlinger查看验证

dumpsys SurfaceFlinger后查看如下在这里插入图片描述
实际查看明显发现SurfaceView位于Activity图层下面,和上面winscope的看着是有冲突的,那么这个到底是winscope不准确有问题,还是我们有啥知识点遗漏呢?
其实当然是我们对winscope的观看知识点有遗漏,简单说就是修为还不够哈,那么针对SurfaceView这种一个怎么看呢?

RelativeLayer方式设置图层相对位置

这里winscope明显可以看到SurfaceView图层上相比其他图层还有一写标识上的差异,多了一些RelZ,和RelZParent这样的标识。
在这里插入图片描述

那么针对这个有特别的RelZ系列标识的应该怎么看呢?

在这里插入图片描述可以看到这里的 Background for SurfaceView图层其实有relative parent:652
这里的652就是新的parent的id
得出结论就是Background for SurfaceView图层其实有新的parent为652.

在这里插入图片描述
可以看到这652就是Activity图层,而且还有一个z-order: -2147483648
这里明显看到z-order是一个极小值,也就可以认为 Background for SurfaceView位于Activity图层级别的最下面。

同时注意Activity图层上也有一个标识RelZParent

在这里插入图片描述
即代表Activity图层是作为了某一个图层RelativeLayer的父亲。这个部分就是相当于图层顺序的核心哈,其实winscope就已经有针对这个相对图层有明显的标识。
那么这里也可以可以理解为啥

Background for SurfaceView其实是位于Activity图层的下面。

正常的其他没有设置相对图层的这部分显示是个none
在这里插入图片描述
比如状态栏只有个绝对图层,他的相对图层就是none。

对应的代码:

相对图层设置其实也是通过上层接口设置的:
在这里插入图片描述
大家如果不清楚到底哪里设置的这个RelativeLayer,可以去这里打堆栈哈。

SurfaceView设置的这个RelativeLayer其实是如下代码:
在这里插入图片描述
更多framework实战干货,请关注下面 ↓ “千里马学框架”

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千里马学框架

帮助你了,就请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值