Android应用程序键盘(Keyboard)消息处理机制分析(3)
??? ? ? ?Step 15. Looper.pollOnce
?? ? ? ?這個函數定義在frameworks/base/libs/utils/Looper.cpp文件中,具體可以參考前面Android應用程序消息處理機制(Looper、Handler)分析一文,這里就不再詳述了。總的來說,就是在Looper類中,會創建一個管道,當調用Looper類的pollOnce函數時,如果管道中沒有內容可讀,那么當前線程就會進入到空閑等待狀態;當有鍵盤事件發生時,InputReader就會往這個管道中寫入新的內容,這樣就會喚醒前面正在等待鍵盤事件發生的線程。
?? ? ? ?InputDispatcher類分發消息的過程就暫時分析到這里,后面會有更進一步的分析,現在,我們回到Step 12中,接著分析InputReader類讀取鍵盤事件的過程。在調用了InputReaderThread線程類的run就函數后,同樣會進入到InputReaderThread線程類的threadLoop函數中去。
?? ? ? ?Step 16. InputReaderThread.threadLoop
?? ? ? ?這個函數定義在frameworks/base/libs/ui/InputReader.cpp文件中:
?? ? ??這里的成員變量mReader即為在前面Step 8中創建的InputReader對象,調用它的loopOnce成員函數執行一次鍵盤事件的讀取操作。
?
?? ? ? Step 17. InputReader.loopOnce
?? ? ??這個函數定義在frameworks/base/libs/ui/InputReader.cpp文件中:
?? ? ? ?這里通過成員函數mEventHub來負責鍵盤消息的讀取工作,如果當前有鍵盤事件發生或者有鍵盤事件等待處理,通過mEventHub的getEvent函數就可以得到這個事件,然后交給process函數進行處理,這個函數主要就是喚醒前面的InputDispatcherThread線程,通知它有新的鍵盤事件發生了,它需要進行一次鍵盤消息的分發操作了,這個函數我們后面再進一步詳細分析;如果沒有鍵盤事件發生或者沒有鍵盤事件等待處理,那么調用mEventHub的getEvent函數時就會進入等待狀態。
?
?
轉載于:https://blog.51cto.com/shyluo/966612
總結
以上是生活随笔為你收集整理的Android应用程序键盘(Keyboard)消息处理机制分析(3)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Catalyst 2950/2955交换
- 下一篇: Windows 7下Eclipse搭建A