背景:
近期有学员朋友在群里提出了关于input模块中的一个批处理相关的疑问点。说批处理这块网络的资料很少,基本上没有地方可以参考,求助马哥是否可以分享一下触摸事件批处理这块知识点。
针对这个批处理这块知识点,马哥不打算直接给大家blog输出干货给大家,即不准备直接给大家喂相关的知识点,而是采用给大家布置几个作业疑问点方式,让大家积极参与进来思考的方式。
布置的几个思考点:
问题1
请问MotionEvent中有关于getHistorical相关的方法,请问你知道这个方法的作用是什么吗?为什么会需要有这个方法?
public final int getHistorySize() {
return nativeGetHistorySize(mNativePtr);
}
public final float getHistoricalX(int pos) {
return nativeGetAxisValue(mNativePtr, AXIS_X, 0, pos);
}
public final float getHistoricalY(int pos) {
return nativeGetAxisValue(mNativePtr, AXIS_Y, 0, pos);
}
请实战打印验证等方式说明这个getHistory相关的方法的作用。
问题2
经常在看systrace或者perfetto时候,发现每次app层面收到vsync后,都需要处理3个大块的逻辑部分
input、animation、traversal
这里animation、traversal都和显示画面有关系,大家可能都比较能理解每次vsync更新,但请问一下为啥这个input也要跟着vsync呢?
问题3
如果针对move事件不采用批处理方式,也和down事件一样,有事件来了就直接进行相关的派发主线程处理,那么可能会造成什么样的后果呢?
这里提示一下大家哈,手机屏幕其实分为显示屏幕和触摸屏幕,大家经常会发现触摸的采样频率会很可能大于刷新频率的好几倍。
好了上面就是留给大家关于input相关的思考作业哈,后续马哥这边会给大家进行剖析解答,更新到相关的vip群中。
更多framework干货知识,请关注下面“千里马学框架”