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系统中扮演的其实是个中转站的角色。好了就写这么多吧,一点简单的不足挂齿的小理解。

你可能感兴趣的:(Android WMS(三)- Input管理)