昨天遇到一个比较诡异的问题,一个页面的底部一个模块UI,在荣耀9i上始终不显示,抓包看了数据都没有问题。
模块是在ListView
的footer
中,刚开始怀疑是footer
导致的问题,但是其他的手机都没有问题,所以确认一遍代码没有问题便放弃了这个方向。
使用Tools->Layout Inspector
查看页面的布局,发现那个模块没有显示,是因为visibility
的属性是GONE
,这时候就觉得很奇怪了,明明都有数据了,所以地方都设置显示了。怎么最后会是GONE
属性呢?
然后同事就开始怀疑这个模块的setVisibility
的方法了,于是重写了方法加上一句日志,打印visibility
的值,结果发现比正常逻辑调用setVisibility
方法的次数要多一次。
于是debug断点确认问题,除了刚开始隐藏,到数据返回回来显示UI之后,有调用了setVisibility
方法。从方法调用堆栈的记录中看到,调用setVisibility
方法的是blockAdClick.HwButton
,而之后的调用时View
的源码调用,继续往下看会发现有当前模块的setVisibility
方法。
看到这里,有了一个新的推论:是不是荣耀9i对调用setVisibility
方法的类有广告相关的关键词(例如:ad,广告)判断,如果包含这类词会在底层拦截系统方法,并在此隐藏。这样诡异的问题才能解释的通。
于是重命名了UI模块的类名,运行测试一下,问题就解决了。
以后打算以后用Hw来代替Ad这个关键词,EMUI有本事你把这个关键词也过滤啊!
网友评论