UI thread
++++ WebView.onTouchEvent
++++ Dispatcher.postPointerEvent  ACTION_DOWN                                     (4.1 WebView把事件交给Dispatcher处理)
++++ Dispatcher.updateStateTrackersLocked
++++         Dispatcher.checkForDoubleTapOnDownLocked                                           (正二次计时并点击有效)
++++                 if(mPostClickScheduled==true  &&  (deltaX*deltaX+deltaY*deltaY)<mDoubleTapSlopSquared)
++++                         mPostClickScheduled = false;  退出二次计时
++++                         Dispatcher.mUiHandler.removeMessages  MSG_CLICK  取消单击
++++                         mPostClickScheduled = false;  mIsDoubleTapCandidate = true;  等待双击
++++         Dispatcher mUiHandler.sendEmptyMessageDelayed  MSG_LONG_PRESS (LONG_PRESS_TIMEOUT)
++++         Dispatcher.enqueueWebKitEvent  EVENT_TYPE_HIT_TEST
++++         Dispatcher mWebKitHandler.sendEmptyMessage  MSG_DISPATCH_WEBKIT_EVENTS
++++         Dispatcher mUiHandler.sendEmptyMessageDelayed  MSG_SHOW_TAP_HIGHLIGHT (TAP_TIMEOUT)
++++ Dispatcher.enqueueUiEvent  EVENT_TYPE_TOUCH
++++         Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS
++++ Dispatcher.dispatchUiEvents
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_TOUCH     出队
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_TOUCH      分给WebView
++++         WebView.dispatchUiEvent  EVENT_TYPE_TOUCH
++++         WebView.onHandleUiEvent  EVENT_TYPE_TOUCH
++++         WebView.onHandleUiTouchEvent
++++         WebView.handleTouchEventCommon  ACTION_DOWN
++++                 if(mSelectingText==true  &&  点中mSelectHandleLeft或mSelectHandleRight) 选字模式并点中游标
++++                         mSelectionStarted = true;  开始选择   设置mSelectDraggingOffset、mSelectDraggingCursor
++++                 WebView.startTouch
++++ Dispatcher mUiHandler.removeMessages  MSG_DISPATCH_UI_EVENTS  队列为空

WebCore thread
++++ Dispatcher.mWebKitHandler.handleMessage  MSG_DISPATCH_WEBKIT_EVENTS
++++ Dispatcher.dispatchWebKitEvents
++++ Dispatcher.dequeueWebKitEvent  EVENT_TYPE_HIT_TEST
++++         Dispatcher.dispatchWebKitEvent  EVENT_TYPE_HIT_TEST
++++         WebViewCore.dispatchWebKitEvent  EVENT_TYPE_HIT_TEST
++++         WebViewCore.performHitTest
++++         WebViewCore.nativeHitTest 
 - - - -         WebViewCore::HitTest
 - - - -         WebViewCore::hitTestAtPoint
 - - - -         Frame.EventHandler::hitTestResultAtPoint
 - - - -                 RenderView.RenderLayer::hitTest 
++++         WebViewCore WebView.sendMessage  HIT_TEST_RESULT  将WebKitHitTest指针传给WebView
++++ Dispatcher.enqueueUiEvent  EVENT_TYPE_HIT_TEST
++++         Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS
    
UI thread
++++ WebView.handleMessage  HIT_TEST_RESULT
++++ WebView.setHitTestResult
++++         mInitialHitTestResult.setType和setExtra

UI thread
++++ Dispatcher.mUiHandler.handleMessage  MSG_DISPATCH_UI_EVENTS
++++ Dispatcher.dispatchUiEvents
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_HIT_TEST
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_HIT_TEST
++++         WebView.dispatchUiEvent  EVENT_TYPE_HIT_TEST
++++         WebView.onHandleUiEvent  EVENT_TYPE_HIT_TEST
 
UI thread
++++ Dispatcher.mUiHandler.handleMessage  MSG_SHOW_TAP_HIGHLIGHT
++++ Dispatcher.postShowTapHighlight
++++ WebView.showTapHighlight
++++         invalidate 
    
UI thread
++++ Dispatcher.mUiHandler.handleMessage  MSG_LONG_PRESS
++++ Dispatcher.postLongPress
++++         Dispatcher.enqueueUiEvent  EVENT_TYPE_LONG_PRESS
++++                 Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS  
    
 UI thread
++++ Dispatcher.mUiHandler.handleMessage  MSG_DISPATCH_UI_EVENTS
++++ Dispatcher.dispatchUiEvents
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_LONG_PRESS
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_LONG_PRESS
++++         WebView.dispatchUiEvent  EVENT_TYPE_LONG_PRESS
++++         WebView.onHandleUiEvent  EVENT_TYPE_LONG_PRESS
++++         WebView.performLongClick
++++         WebView.selectText
++++         WebView WebViewCore.sendMessage  SELECT_WORD_AT  
    
WebCore thread
++++ WebViewCore.handleMessage  SELECT_WORD_AT
++++ WebViewCore.nativeSelectWordAt
 - - - - WebViewCore::SelectWordAt
 - - - - WebViewCore::selectWordAt
 - - - -         RenderView.RenderLayer::hitTest           进行一次hitTest->Node(结点)->VisiblePosition->VisibleSelection
 - - - - WebViewCore::selectWordAroundPosition
 - - - - SelectionController::setSelection                    保存选择结果VisibleSelection
 - - - -         return; 选择不变->返回
 - - - - WebViewCore::updateTextSelection
 - - - -         WebViewCore::createSelectText             创建SelectText
 - - - -         WebViewCore JNI updateTextSelection
++++         WebViewCore.updateTextSelection        将SelectText指针传给WebView
++++         WebViewCore WebView.sendMessage  UPDATE_TEXT_SELECTION_MSG_ID

UI thread
++++ WebView.onTouchEvent
++++ Dispatcher.postPointerEvent  ACTION_MOVE
++++ Dispatcher.updateStateTrackersLocked
++++ Dispatcher.enqueueUiEvent  EVENT_TYPE_TOUCH
++++         Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS
++++ Dispatcher.dispatchUiEvents
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_TOUCH
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_TOUCH
++++         WebView.dispatchUiEvent  EVENT_TYPE_TOUCH
++++         WebView.onHandleUiEvent  EVENT_TYPE_TOUCH
++++         WebView.onHandleUiTouchEvent
++++         WebView.handleTouchEventCommon  ACTION_MOVE
++++                 if(mSelectingText==true  &&  mSelectionStarted==true) 选字模式并开始选择
++++                         WebView.updateWebkitSelection
++++                                 WebView WebViewCore.sendMessage  SELECT_TEXT
++++                         invalidate

WebCore thread
++++ WebViewCore.handleMessage  SELECT_TEXT
++++ WebViewCore.nativeSelectText
 - - - - WebViewCore::SelectText
 - - - - WebViewCore::selectText
 - - - -         RenderView.RenderLayer::hitTest           start hitTest->Node(结点)->VisiblePosition
 - - - -         RenderView.RenderLayer::hitTest          end  hitTest->Node(结点)->VisiblePosition->VisibleSelection
 - - - - SelectionController::setSelection                          保存选择结果VisibleSelection
 - - - -         return; 选择不变->返回
 - - - - WebViewCore::updateTextSelection                      选择改变->更新
 - - - -         WebViewCore::createSelectText                    创建SelectText
 - - - -         WebViewCore JNI updateTextSelection
++++         WebViewCore.updateTextSelection               将SelectText指针传给WebView
++++         WebViewCore WebView.sendMessage  UPDATE_TEXT_SELECTION_MSG_ID
    
UI thread
++++ WebView.handleMessage  UPDATE_TEXT_SELECTION_MSG_ID
++++ WebView.updateTextSelectionFromMessage
++++         WebView.nativeSetTextSelection                          保存SelectText指针在WebView中
 - - - -                 WebView::nativeSetTextSelection
 - - - -                 WebView::setTextSelection
 - - - -                 WebView::setDrawExtra
++++         WebView.setupWebkitSelect                                进入选字模式
++++                 WebView.startSelectingText     mSelectingText=true; mShowTextSelectionExtra=true;
++++                 mTouchMode=TOUCH_DRAG_MODE;
++++         invalidate

UI thread
++++ WebView.onTouchEvent
++++ Dispatcher.postPointerEvent  ACTION_UP
++++ Dispatcher.updateStateTrackersLocked
++++         Dispatcher.mUiHandler.removeMessages  MSG_LONG_PRESS  取消长按
++++         if(downDuration<LONG_PRESS_TIMEOUT)长按前
++++                 if(mIsDoubleTapCandidate==true)正等待双击
++++                         Dispatcher.enqueueUiEvent  EVENT_TYPE_DOUBLE_TAP
++++                                 Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS
++++                 else
++++                         mPostClickScheduled=true;   开始二次计时,发送短按
++++                         Dispatcher mUiHandler.sendEmptyMessageDelayed  MSG_CLICK (DOUBLE_TAP_TIMEOUT)
++++         else
++++                 WebView.showTapHighlight
++++ Dispatcher.enqueueUiEvent  EVENT_TYPE_TOUCH
++++         Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS
++++ Dispatcher.dispatchUiEvents
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_DOUBLE_TAP                                         【若有双击事件】
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_DOUBLE_TAP
++++         WebView.dispatchUiEvent  EVENT_TYPE_DOUBLE_TAP
++++         WebView.onHandleUiEvent  EVENT_TYPE_DOUBLE_TAP
++++         ZoomManager.handleDoubleTap
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_TOUCH
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_TOUCH
++++         WebView.dispatchUiEvent  EVENT_TYPE_TOUCH
++++         WebView.onHandleUiEvent  EVENT_TYPE_TOUCH
++++         WebView.onHandleUiTouchEvent
++++         WebView.handleTouchEventCommon  ACTION_UP
++++               【1】TOUCH_INIT_MODE或TOUCH_SHORTPRESS_START_MODE或TOUCH_SHORTPRESS_MODE   短按
++++                 if(mSelectingText==true  &&  mSelectionStarted==false) 选字模式但没有开始选择(即没点中游标)
++++                         WebView.selectionDone      退出选字模式
++++                                 WebView.endSelectingText     mSelectingText=false; mShowTextSelectionExtra=false; 
++++                                 invalidate
++++               【2】
++++
++++                 WebView.stopTouch
++++ Dispatcher mUiHandler.removeMessages  MSG_DISPATCH_UI_EVENTS  
  
UI thread
++++ Dispatcher.mUiHandler.handleMessage  MSG_CLICK    超过二次计时->单击
++++ Dispatcher.postClick
++++         mPostClickScheduled = false;    取消二次计时
++++         WebView.showTapHighlight
++++         Dispatcher.enqueueWebKitEvent  EVENT_TYPE_CLICK
++++                 Dispatcher mWebKitHandler.sendEmptyMessage  MSG_DISPATCH_WEBKIT_EVENTS  
    
WebCore thread
++++ Dispatcher.mWebKitHandler.handleMessage  MSG_DISPATCH_WEBKIT_EVENTS
++++ Dispatcher.dispatchWebKitEvents
++++ Dispatcher.dequeueWebKitEvent  EVENT_TYPE_CLICK
++++         Dispatcher.dispatchWebKitEvent  EVENT_TYPE_CLICK
++++         WebViewCore.dispatchWebKitEvent  EVENT_TYPE_CLICK
++++         WebViewCore.nativeMouseClick 
 - - - -         WebViewCore::MouseClick
 - - - -         WebViewCore::performMouseClick
 - - - -                 EventHandler::handleMousePressEvent
 - - - -
 - - - -                 EventHandler::handleMouseReleaseEvent
 - - - -                         EventHandler::prepareMouseEvent
 - - - -                                 Document::prepareMouseEvent
 - - - -                                         RenderView.RenderLayer::hitTest
 - - - -                         EventHandler::dispatchMouseEvent  mouseup
 - - - -                                 EventDispatcher::dispatchEvent  mouseup
 - - - -                         EventHandler::dispatchMouseEvent  click
 - - - -                                 EventDispatcher::dispatchEvent   click
 - - - -                                        (Node*->defaultEventHandler click)
 - - - -                                         HTMLAnchorElement::defaultEventHandler
 - - - -                                         WebCore::handleLinkClick
 - - - -                                         FrameLoader::urlSelected  发送请求
++++ Dispatcher.enqueueUiEvent  EVENT_TYPE_CLICK
++++         Dispatcher mUiHandler.sendEmptyMessage  MSG_DISPATCH_UI_EVENTS

UI thread
++++ Dispatcher.mUiHandler.handleMessage  MSG_DISPATCH_UI_EVENTS
++++ Dispatcher.dispatchUiEvents
++++ Dispatcher.dequeueUiEvent  EVENT_TYPE_CLICK
++++         Dispatcher.dispatchUiEvent  EVENT_TYPE_CLICK
++++         WebView.dispatchUiEvent  EVENT_TYPE_CLICK
++++         WebView.onHandleUiEvent  EVENT_TYPE_CLICK

++++
++++
++++
++++
++++
++++
++++
++++
++++
++++
++++
++++ 
++++
++++ 
++++
++++
++++
++++
++++
++++
++++ 
++++
++++
++++
++++
++++
++++
++++ 
++++
++++
++++
++++
++++
++++
++++ 
++++
++++
++++
++++
++++
++++
++++ 
++++ 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - -  
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
 - - - - 
++++
++++
 UI thread

Android4.1 onTouchEvent分析 (选字模式等)相关推荐

  1. lintcode-828. 字模式

    题目描述: 828.字模式 给定一个模式和一个字符串str,查找str是否遵循相同的模式. 这里遵循的意思是一个完整的匹配,在一个字母的模式和一个非空的单词str之间有一个双向连接的模式对应. 样例 ...

  2. win10输入法看不见选字框_win10系统运行传奇打字时看不到选框如何处理

    一位用户反馈自己将电脑系统升级到win10正式版后,刚开始还觉得新系统界面比win7精致细腻,可是在运行传奇游戏时就遇到了打字时看不到选框的情况,这是怎么回事呢?其实,该问题是由于输入法不兼容引起的. ...

  3. vue使用vue2-verify实现前端验证码(滑动,拼图,数字,选字验证)

    先附上插件github地址 vue2-verify 先说一下弊端,使用拼图模式时,只能使用外链图片,使用本地图片时怎么写都不对,加载不到资源,如果有人知道怎么写可以留言给我,其他模式还是很好用的,在移 ...

  4. win10输入法看不见选字框_win10系统运行传奇打字时看不到选框如何处理?

    一位用户反馈自己将电脑系统升级到win10正式版后,刚开始还觉得新系统界面比win7精致细腻,可是在运行传奇游戏时就遇到了打字时看不到选框的情况,这是怎么回事呢?其实,该问题是由于输入法不兼容引起的. ...

  5. Android4.4 framework分析——ActivityManagerService的启动和对Activity的管理

    本文主要介绍android4.4中ActivityManagerService的启动和ActivityManagerService对Activity堆栈的管理. 一.ActivityManagerSe ...

  6. 计算机英语学情分析怎么写,2016年信息技术教学计划及学情分析(600字)

    JE范文为您整理.编辑<2016年信息技术教学计划及学情分析(600字)>一文,为了您更好完成一篇精彩的范文,JE范文还为你准备与<2016年信息技术教学计划及学情分析(600字)& ...

  7. AbstractQueuedSynchronizer 原理分析 - 独占/共享模式

    1.简介 AbstractQueuedSynchronizer (抽象队列同步器,以下简称 AQS)出现在 JDK 1.5 中,由大师 Doug Lea 所创作.AQS 是很多同步器的基础框架,比如 ...

  8. Win11输入法的选字框不见了怎么办?

    有很多升级到Win11系统的用户反映在打字的时候发现输入法竟然不显示选字框了,不知道要如何进行解决,其实解决的方法非常的简单,快来看看小编为大家带来的Win11输入法的选字框不见了的解决方法吧,希望可 ...

  9. 选字验证码破解思路:CTPN - 自然场景文本检测

    前言 最近准备极验3代,选字验证码的破解.之前用CNN实现端到端的字符型验证码破解已满足不了需求了,我以为破解选字验证码关键步骤有三:1.图片文本的识别:2.字符坐标的识别:3.字序的识别.设计的技术 ...

最新文章

  1. 摄像机的几个重要的技术指标
  2. 微软开源 Quantum Katas,领先的量子编程解决方案
  3. 模生物嗅觉的神经算法,能让电脑芯片识别气味
  4. 从sqlserver中数据写入mysql_[SQL Server]SQL Server数据库中如何返回INSERT INTO语句插入/写入数据后的记录值(比如ID等)?...
  5. Python-OpenCV--直线提取
  6. 理解 Linux 中 `ls` 的输出
  7. OpenCV学习笔记(三):图像对比度、亮度调整源码
  8. Java程序员高效开发必备工具,其中有你的最爱吗?
  9. Silverlight中需要用到模板选择器(DataTemplateSelector)的替代方案
  10. 向量与向量空间(vector space)
  11. 多智能体强化学习之MAPPO理论解读
  12. 一:springCloud服务发现者,服务消费者(方志朋《史上最简单的 SpringCloud 教程》专栏读后感)
  13. 产品温度冲击检测 VS 实际使用寿命换算详解
  14. MySQL 数据库删除操作中的 delete、drop、 truncate 区别在哪?
  15. timesat数据如何读取_判二手车调表车另类方法。如何利用OBD读取可靠数据(技术类)...
  16. Command ‘ifconfig‘ not found/ubuntu无法联网(有线);Ubuntu联网只有lo 没有eth0情况;Ubuntu无线联网,有WIFI未发现WIFI适配器(有网卡)
  17. 实现正负值及多条Y轴 Echarts柱状图
  18. 要关闭python解释器可使用函数或者快捷键_超星尔雅中华传统文化之戏曲瑰宝第七章节测验网课答案选修课慕课答案...
  19. Code jock 8.7 源代码编译
  20. 胖哈勃 web--NewSql Mysql 8 注入

热门文章

  1. POJ 1833 排列【STL/next_permutation】
  2. Oracle 创建dblink
  3. php之变量覆盖漏洞讲解
  4. 开发DBA(APPLICATION DBA)的重要性
  5. [日志]做人与标点符号
  6. [导入]浅析.Net下的AppDomain编程
  7. Map集合中的一些具体方法的体现
  8. chrome开发总结(交互/权限/存储)-爬虫
  9. easyUI的combobox设置隐藏和显示
  10. 站点安全预警,建议大家多重禁止load_file函数!