在使用手机的时候,有时候会出现触碰中断的异常问题,比如点击无效,已经存在的触碰事件突然消失,这种问题很直观,用户体验很差。
如果能够复现问题,抓到实时log,分析起来会清楚很多。可以打开开发者选项中的指针轨迹,这个触碰轨迹的实现是使用了PointerLocationView,注册到WM中,在事件分发的时候也发给它一份数据,题外话,可以通过类似的方式获取到触碰事件。
如果没有点击轨迹,显然是事件没有走到分发,可能是屏幕硬件没有获取到事件,可以查看有没有inputread的相关log。
之前我们讨论过,使用input tap命令注入点击事件,会使屏幕上已有的事件被取消,即发生断触,可以看到InputDispatcher Cancel的log,因为注入的事件导致事件异常或者设备切换问题。cancel是一种系统保护机制,不然一个点击事件一直结束不了,是一个非常严重的问题。
我们可以利用这个来进行主动断触
应用层可以在onTouchEvent方法中获取到触碰事件进行处理,在多点触碰的时候,处理还比较复杂,如果应用处理的不好,就会出问题,很多断触就是应用本身的问题。