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

  • 相关阅读:
    C# 反射设置属性帮助类
    WPF xaml中写代码
    redis 击穿、穿透、雪崩产生原因及解决方案
    Linux环境安装Tengine
    lsof使用说明
    Delve调试器简单使用说明
    web访问日志分析
    MongoDB中文社区 Freetalk,一起来玩快闪!
    在线研讨会:实时数据同步应用场景及实现方案探讨
    labview使用百度地图API,报错getContext方法未定义
  • 原文地址:https://www.cnblogs.com/lkq1220/p/7218063.html
Copyright © 2020-2023  润新知