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. 分发事件具体调用时序图

  • 相关阅读:
    转义将正文中换行符
    THINKPHP短链接设置方法(路由设置)
    MEMCACHE分布式算法(PHP)
    win7下memCache安装过程
    JQUERY根据值将input控件选中!
    Thinkphp CURD中的where方法
    SQL语法LPAD和RPAD
    Linux查看docker容器日志
    Linux中清空docker容器日志
    错误记录——fail: Microsoft.AspNetCore.Server.Kestrel[13]
  • 原文地址:https://www.cnblogs.com/lkq1220/p/7218063.html
Copyright © 2011-2022 走看看