input的处理细节比较复杂,在app端时,是通过监听input channel的fd,把事件接入到主线程的looper中,所以我们可以看到,相关的处理是在主线程中进行的,
再进行一个试验,在onTouchEvent方法中,对MOTION_DOWN和MOTION_MOVE 事件处理分别打印堆栈,大家觉得会是一样的么?
试一下,就会发现,处理流程不一样,头尾是相同的,但是中间出现了分支,
同样的touch事件,分成了2种流程,一种相思两处闲愁,这样的处理确实让人发愁。
move事件的处理调用到choreographer相关处理。
为什么会这样,在哪里进行的区分呢?
这里大致看一下,
在注册input的fd到主线程loopper的时候,设置了回调方法,当有数据到来的时候,会调用到