Android View问题排查汇总
View问题排查汇总
1. 本应展示的view没有显示
1.1 分析
解决问题之前,避免依靠直觉去解决问题,我们应该先分析下view显示的几个因素
view能够显示有几个因素
- 依赖的内容都展示了,一般来讲是父view都在展示
- view自身设置为了visible
- view没有被覆盖
- view的大小不是0
知道了这么几个条件,我们做对应的排查即可
1.2 问题排查
上方面分析了展示的几个提交,一个条件没有达到,view就不能正常显示,怎么样能够排除上面的每个问题的原因呢,这也是找到问题的原因所在
view没有显示的几个原因
- 依赖的view没有做展示
- view自身设置了gone/invisible
- view被覆盖了
- view的大小是0
排查view的问题有几个方式
代码排查
借助于工具
1.2.1 代码排查
代码排查是最直接我们能够想到的,代码排查也有几个方式
- 给view设置一个背景色
- 阅读源码,逐步分析
1.2.1.1 给view设置背景色
给view设置一个背景色,看view是否真的展示了出来,但是能不能想到更好的办法
1. 代码排查需要的时间比较长,而且可能是比较慢的,尤其是对于大型的客户端工程.
2. 在上面提到的几个触发的几个原因,也许还不能一次就看到结果,或者说是没有效果的,假如说view的背景色设置为红色,但是view还是没有显示,能确定那个因素是不可能的,其实都没有排查掉
1.2.1.2 阅读源码,逐步分析
阅读源码是很好的方式,对于阅读源码的速度以及理解能力会有提高,但是同样有几个弊端
- 对于接受别人的代码而言,上手就要阅读源码,代码量可能很大,而且我们首先是定位问题,不是要直接的解决问题,定位了问题,下一步才是解决方案.
1.2.1.3 总结
适合场景 : 代码排查适合于,不能debug的工程,以及作为排查的最后的兜底方式.
1.2.2 工具
其实view没有展示,是现象,我们可以从现象倒推出下一步的现象
有几个工具可以借鉴
- android系统的显示布局的边界
- 借助于hierachyView
- 借助于LayoutInspector
1.2.2.1 android系统的显示布局的边界
这个操作是最简单的,但是发现问题的几率比较小,一般使用这个也是配合设置view的背景色一起使用
1.2.2.2 借助于hierachyView
已经过时的方法,不做分析
官网链接 https://developer.android.com/studio/profile/hierarchy-viewer.html
1.2.2.3 借助于LayoutInspector(方便,快捷,推荐)
android studio提供了LayoutInspector的入口, LayoutInspector能够查看布局的继承结构,已经单个view的属性(view的大小,布局的属性,view的显示隐藏等),因而这种方式是很好的.
能够查看这些属性,我们上面提到的几个导致view不能显示的原因,都能迎刃而解
但是要注意适用的场景
- debug的模式
- android系统 api >= 16
还可能有其他的限制条件,具体可以查看 官方链接 https://developer.android.com/studio/debug/layout-inspector.html
2. View 触摸事件
view在相关的动画或者移动处理时,如果要依靠view的onTouch时的ACTION_MOVE的处理时,可能是有问题的,因为ACTION_MOVE在部分手机上的回调可能是没有的,在用户的手小幅度的移动时,这个事件可能是忽略的