06.输入系统:第10课第8节_输入系统_Dispatcher线程_总体框架

在前一个课时中,主要讲解了Reader线程线程从驱动读取输入事件,仅做简单的转换,然后转发给Dispatcher线程,该课时主要讲解Dispatcher线程相关内容,该小节我们先讲解ispatcher线程的总体框架,然后在讲解Reader线程给Dispatcher线程发送事件的具体过程,总的框图如下:
06.输入系统:第10课第8节_输入系统_Dispatcher线程_总体框架
Dispatcher英文是分发的意思,那么有两个问题我们需要解决:
1.发什么
2.发给谁
对于第二个问题,当然是发送给应用程序,发送给众多应用程序中的某些程序,那么有一个选择目标的过程,然后再发送事件。在这之前当然需要获取事件,那么这些事件是从哪里来的?是Reader线程发送的。InputRead线程会把那些事件放入一个叫mInboundQueue的队列之中,这个队列是属于Dispatcher线程,在放入之前,他会做一些处理,把这些事件进行分类,例:如果是紧急的事件(收到来电时,不想打扰别人,我们会按下静音键,或者电源键)。

从mInboundQueue中取出事件的时候,也会稍作处理,比如:读取到的是Home/globle/system按键,那么该按键就不会传递给应用程序。对于user按键事件会把发放到另一个队列中。这个队列是目标APP的队列(outbountQueue)。

android的Dispatcher线程与众多的APP都存在连系,使用connect来表示,其上的outbountQueue就属于connect之中,简单框图如下:
06.输入系统:第10课第8节_输入系统_Dispatcher线程_总体框架
最后从outbountQueue中取出数据,通过connection发送给APP应用程序。下面是一个很好的图解:
06.输入系统:第10课第8节_输入系统_Dispatcher线程_总体框架
下面是做标记的框图,与第一幅图的中红色标记的1,2,3,4,5一一对应。
06.输入系统:第10课第8节_输入系统_Dispatcher线程_总体框架
其中InputReader线程,与Dispather线程,APP所属部分都使用红线分开。