Android WMS(三)- Input管理

原创内容,转载请注明出处,多谢配合。

Input系统中,WMS主要参与InputDispatcher寻找焦点窗口建立连接通信的过程。

这部分详细内容之前Input系列两篇文章已经做了比较详细的分析:

Android Input(四) -InputDispatcher分发事件
Android Input(五)-InputChannel通信

当然感兴趣的可以把整个系列都看看。

然后呢,一图胜千言(偷懒画个草图 ):

WMS参与的Input中转流程

1)通信:
应用层与WMS通信是进程间通信,需要binder call。
WMS与InputDispacher都属于system_server进程,属于进程内通信。

2)在Input事件触发之前的UI绘制阶段ViewRootImpl已经通过setView(对应的WMSaddWindow)让WMS创建InputChannel, 会创建一对socket pair用于通信,分别注册到Server端(InputDispatcher)和client端(app)。两端都通过各自Looper监听了对端的写操作,一旦对端搞事情,马上回调响应。另外Server端会封装一个Connection,它描述的是一个连接通道,主要包含:服务端的inputChannel 、outboundQueue以及waitQueue。它属于一个连接之后数据操作的渠道。并且通过mConnectionsByFd以(fd,connection)键值对形式统一管理Connection。mConnectionsByFd它就像一个电话薄,每次InputDispacher要打电话,先去查对应的connection,如果对方准备好了,你们就开始喂喂喂地打电话。

WMS在Input系统中扮演的其实是个中转站的角色。好了就写这么多吧,一点简单的不足挂齿的小理解。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容