zoukankan      html  css  js  c++  java
  • Android系统--输入系统(十七)Dispatcher线程_分发dispatch

    Android系统--输入系统(十七)Dispatcher线程_分发dispatch

    1. 回顾

    • InputRead线程从输入设备当中得到输入事件

    • 对于读到输入事件稍作处理,比如紧急事件,来电时候按下音量键便是静音,这时候是直接处理的,处理之后再把输入事件放入mInBoundQueue队列当中,接着唤醒Dispatch线程。

    • 对于Dispatch线程也是对输入事件稍作处理之后,再给分发给应用程序

      • Global Key/System Key:处理之后直接丢掉
      • User Key:上传给应用程序:通过查找目标APP得到对应connection,再把输入事件放入某个outBoundQueue队列中,应用程序将其取出处理。

    2. 分发dispatch事件概述

    在上一篇博文分析到在Dispatch线程当中有一个Vector容器(mConnectionByFd),里面有多个connection,这些connection对应着一个个应用程序connection含有InputChannel(含有fd),应用程序也含有对应fd,fd通过socketpair机制得到。Dispatch线程找到对应的connection之后,便可以将输入事件写入InputChannel中的fd中,应用程序通过socketpair机制马上便可以获得fd。

    3. 分发Dispatch过程

    • 查找目标

      • 向WindowManagerService查询当前窗口
      • 获得对应的connection
    • 把输入事件放入connection某个队列outBoundQueue中

    • 从队列中取出,构造为InputMessage类型,逐个将输入事件写入fd中

    4. 分发事件具体调用时序图

  • 相关阅读:
    java处理高并发高负载类网站的优化方法
    谈谈Memcached与Redis
    php中const与define的使用区别 详解
    ecshop添加模板与库文件
    ECShop 2.5.1 的结构图及各文件相应功能介绍
    Uva10972(RevolC FaeLoN)
    交叉染色法判断二分图
    边双联通问题求解(构造边双连通图)POJ3352(Road Construction)
    POI1999(仓库管理员)
    ZOJ1311(Network)
  • 原文地址:https://www.cnblogs.com/lkq1220/p/7218063.html
Copyright © 2011-2022 走看看