Touch 事件原理分析 (三)

Android视图结构


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 结构视图就可以分析出事件的分发顺序


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容