浮点数引发的Canvas绘制血案
今天在Android项目开发中遇到一个比较有趣的奔溃问题,感觉也好久没有写文章了,觉得可以跟大家分享一下的。这个问题涉及到浮点数计算、View绘制流程和机制,理清楚后发现问题其实很简单。
1.案发现场回顾
1.1 问题描述
某同学通过外部跳转直接进入WindowA(底部4个tab)的第4个tab的时候打开了WindowB,在WindowB中进行了横竖屏切换,此时返回了WindowA,切换到第1个tab后,发现app卡死之后闪退。
1.2 问题分析
1.2.1 下面简单拆解一下其实现:
- WindowA中4个tab对应的View通过设置visibility(GONE/VISIBLE)切换。
- WindowA针对横竖屏切换做了监听,更改了Tab1中某些View的大小和位置并触发重绘制。
- WindowA中初始时候四个Tab都是GONE,直接进入Tab4的时候这时候只有Tab4是VISIBLE。
- 从WindowB回来后只有点击Tab1才会触发奔溃。
- 点击Tab1之后只做了一个处理,那就是切换其Visibility为VISIBLE。
??????为什么仅仅设置了一个View的Visibility就会导致闪退呢??????
?&#x