IMS发送键盘消息到Activity窗口通道能力验证

从上两篇文章我们知道创建了两个管道,这两个管道的作用是用于有消息事件发生的通信。那么实质传输什么时间,则是放在了在创建Connection的时候创建了共享内存里面的。既当Sever端写端有键盘消息时候写入内容,把键盘具体消息内容写入共享内存中,那么在Client端读端唤醒之后,从共享内存中获取到数据。这里要注意的一点就是,读端和写端都是在ServerSystem进程下创建的,因此需要通过binder进程通信。IMS发送键盘消息到Activity窗口的过程很多,比较复杂,因此本文分析的流程图以文字为主。这里我们假设一切键盘消息还没发生,读写等线程在睡眠状态,那么当EventHub监听到按键有按下的消息时候,读写线程InputReader就会被唤醒,继而分发线程被唤醒,分发线程找到对应当前激活的Activity窗口,根据该窗口查出上文注册通道疑问中创建的Connection对象,该对象有个内部对象,主要记录了消息以及通知当前激活的Activity窗口有内容可以获取了,前向管道写端写入内容之后,前向管道的读端注册的接收信息反馈方法被调用,于是在该方法中开始获取从共享内存中获取键盘消息内容,进一步的,通知应用程序,有键盘消息了,应用程序开始接收处理消息,进入到ViewRootImpl的deliverInputEvent方法中。处理完毕之后,通过反向管道告知InputManager消息处理完毕。


18582563-6afe7b267b33bcd4.png

当我们退出当前应用程序的Activity窗口的时候,应用程序会做注销键盘通道的操作,这部分主要就是释放贡献内存,结束监控键盘读取、结束读取和分发线程,移除前向管道反向管道等。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值