no route to host Chromium网页输入事件捕捉和手势检测过程分析

电脑杂谈  发布时间:2018-02-16 22:46:44  来源:网络整理

no route to host 手机_隔离no route to host_no route to host

连续的输入事件可能会产生一定的手势操作。比如滑动手势和捏合手势。

在Chromium中,网页的输入事件是在Browser进程中捕捉的。Browser进程捕获输入事件之后,会进行手势操作检测。检测出来的手势操作将会发送给Render进程处理,由于它们须要应用在网页之上。与此同一时候。Browser进程也会将原始的输入事件发送给Render进程处理。本文接下来就分析Browser进程处理网页输入事件的过程。

老罗的新浪微博:,欢迎关注!

《Android系统源码情景分析》一书正在进击的程序猿网()中连载,点击进入。

接下来我们将以Chromium自带的Content Shell APK为例,说明Chromium的Browser进程捕获网页输入事件以及检测手势操作的过程,如图1所看到的:

分享图片

图1 Browser进程处理网页输入事件的过程

从前面Chromium网页输入事件处理机制简要介绍和学习计划一文能够知道,Content Shell APK将网页渲染在一个SurfaceView控件上。

这个SurfaceView又是嵌入在一个ContentView控件里面的。

当用户在网页上触发了一个输入事件时,比如触发一个Touch事件时,这个Touch事件就会被系统分发给上述ContentView控件处理。表现为该ContentView控件的成员函数onTouchEvent被调用。

ContentView控件得到Touch事件之后,会将它传递到Chromium的C++层去处理。Java层的每个ContentView控件在C++层都相应一个ContentViewCore对象。C++层的ContentViewCore对象得到Touch事件之后。就会通过一个Gesture Dector和一个Scale Gesture Detector进行滑动(Scroll)和捏合(Pinch)手势检测。检测出来的滑动和捏合手势将会统一保存在一个Gestrue Packet中。这个Gestrue Packet接下来会被一个Input Router封装在一个类型为InputMsg_HandleInputEvent的IPC消息中,发送给Render进程处理。

注意。Touch事件经过手势检测之后。它本身也会被上述Input Router通过另外一个InputMsg_HandleInputEvent消息发送给Render进程处理。这意味着在这样的情况下,Render进程将收到两个InputMsg_HandleInputEvent消息。

接下来,我们就从ContentView类的成员函数onTouchEvent开始,分析Browser进程处理网页输入事件的过程,例如以下所看到的:

public class ContentView extends FrameLayout
        implements ContentViewCore.InternalAccessDelegate, SmartClipProvider {
    ......

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return mContentViewCore.onTouchEvent(event);
    }

    ......
}

这个函数定义在文件external/chromium_org/content/public/android/java/src/org/chromium/content/browser/ContentView.java中。


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-81055-1.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    • 谢其超
      谢其超

      千千爱你

    • 托尼托尼姆
      托尼托尼姆

      不制造地区紧张武器怎么能好卖呢

    • 朱永健
      朱永健

      虽然美国有台湾保护法

    热点图片
    拼命载入中...