1. 回顧
InputRead線程從輸入設(shè)備當中得到輸入事件
對于讀到輸入事件稍作處理,比如緊急事件,來電時候按下音量鍵便是靜音,這時候是直接處理的,處理之后再把輸入事件放入mInBoundQueue隊列當中,接著喚醒Dispatch線程。
對于Dispatch線程也是對輸入事件稍作處理之后,再給分發(fā)給應用程序
Global Key/System Key:處理之后直接丟掉
User Key:上傳給應用程序:通過查找目標APP得到對應connection,再把輸入事件放入某個outBoundQueue隊列中,應用程序?qū)⑵淙〕鎏幚怼?/p>
2. 分發(fā)dispatch事件概述
在上一篇博文分析到在Dispatch線程當中有一個Vector容器(mConnectionByFd),里面有多個connection,這些connection對應著一個個應用程序connection含有InputChannel(含有fd),應用程序也含有對應fd,fd通過socketpair機制得到。Dispatch線程找到對應的connection之后,便可以將輸入事件寫入InputChannel中的fd中,應用程序通過socketpair機制馬上便可以獲得fd。
3. 分發(fā)Dispatch過程
查找目標
向WindowManagerService查詢當前窗口
獲得對應的connection
把輸入事件放入connection某個隊列outBoundQueue中
從隊列中取出,構(gòu)造為InputMessage類型,逐個將輸入事件寫入fd中
4. 分發(fā)事件具體調(diào)用時序圖
http://www.cnblogs.com/lkq1220/p/7218063.html