Android WindowManager.LayoutParams type 层级问题

Android WindowManager.LayoutParams type 层级问题,第1张

一开始以为对应的type类型的int值就是最终的层级,试了半天都不对。就去看了下源码(Android11),发现是我错了, 此处记录下这个问题

根据源码一步一步观察调用链,很容易发现WindowManager中的addView是通过Session(也是就IWindowSession的实现类)中的addToDisplay方法, 进一步追踪发现是WindowManagerService中的addWindow()方法调用,通过一系列判断最终调用win.mToken.addWindow(win); 不同源码可能不一样。

继续追踪代码,最后来到WindowToken中的mWindowComparator 发现是一个实现了Comparator的变量,点击发现是通过mBaseLayer比较的。

继续返回WindowState类,查看mBaseLayer赋值的地方。因为我只要看系统层级的。计算公式mPolicy.getWindowLayerLw(this) * TYPE_LAYER_MULTIPLIER + TYPE_LAYER_OFFSET; 也就是只要看WindowManagerPolicy::getWindowLayerLw是怎么实现的即可

另外注意下(PhoneWindowManager extends WindowManagerPoilcy)::checkAddPermissionDisplayPolicy::prepareAddWindowLw 筛选的type类型

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/web/992210.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存