故事是这样事儿的:
刚入职不久,leader就分给我一个bug让我研究研究。
Bug:查看最近任务时,有时上滑或下滑的时候,tp有报点,但应用界面未执行响应动画。
当时对SystemUI不怎么了解,看了bug后一脸懵逼。
过了两天,leader又来消息啦,没什么思路的话就提MTK EService吧。一阵喜悦涌上心头,这个我会啊!几分钟操作,case提交成功。没想到,故事才刚刚开始。MTK 沟通了两次,要了份log后就杳无音讯了。死活不回复进展。每每leader问起此bug,都是一脑门子包。(此过程省略3000字)
既然如此,只能自己上阵啦。最近也学习了很多SystemUI相关的内容。对Android源码的了解自认为是上了一层楼的。说干就干。
从SystemUI的recents界面入手。想到的是动画效果和touchEvent的响应逻辑问题。那,应该就是在某个view里面啦。大致看了一下Recents的UI结构,锁定到RecentsView及TaskStackView。而对应的事件响应,那自然就是onInterceptTouchEvent和onTouchEvent这两个方法啦。 这里特殊一点的是,具体处理逻辑都是在两个Handler(RecentsViewTouchHandler和TaskStackViewTouchHandler只是名字叫Handler,并没有继承android.os.Handler)中进行的。
分析发现,RecentsView并没有对事件进行拦截,都传递到了TaskStackView,这也是理所当然的嘛。那么所有的逻辑都归总在了TaskStackViewTouchHandler。
经过各种debug,发现问题就发生在这里