Touch 事件原理分析 (三)

Touch 事件原理分析 (三)_第1张图片
Android视图结构


Touch 事件原理分析 (三)_第2张图片
Touch事件初识调用顺序

我们已经知道了Touch 事件的底层原理,同时我们也知道了Window的创建过程,在widow创建的过程中,每个Window 都有一个 ViewRootImpl 在 WindowManagerGlobal 的  addView 中创建, 并调用 setView ,来完成 window 的添加。在添加之前会调用requestLayout完成初始化绘制,添加之后也可以调用requestLayout 发起重绘请求。这里就需要区分一下 invalidate 和 requestLayout 的区别。

我们重新回到事件分发上来,上节说到,native层会通过 InputChannel 通过 socket 通信,将 Touch 事件发送到应用层,在 ViewRootImpl 的  setView  方法中,requestLayout 之后就会创建一个 inputChannel,在调用的  mWindowSession.addToDisplay  中,inputChannel 就是其中的一个参数。同时也是 WindowInputEventReceiver 的构造参数。 WindowInputEventReceiver 时 ViewRootImpl 的内部类,继承了 InputEventReceiver, 并重写了 onInputEvent 方法,

@Override

public void onInputEvent(InputEvent event, int displayId) {

enqueueInputEvent(event, this, 0, true);

}

在这里,将Touch事件交给了 应用层,结合Android 结构视图就可以分析出事件的分发顺序


Touch 事件原理分析 (三)_第3张图片

你可能感兴趣的:(Touch 事件原理分析 (三))