編輯:關於Android編程
InputManager類處理過程:
InputManager 先創建InputDispatcher 和InputReader對象,並把InputReader和InputDispatcher對象為參數再創建兩個線程對象,InputReaderThread 以及InputDispatcherThread。InputManager::start()啟動兩個線程。
InputReader類處理過程:
InputReader::loopOnce()--->EventHub::getEvents()--->InputReader::processEventsLocked()---
--->InputReader::processEventsForDeviceLocked()--->InputDevice::process()--->TouchInputMapper::process()--
--->TouchInputMapper::sync()--->TouchInputMapper::dispatchTouches()
EventHub類處理過程:
getEvents()函數負責處理事件,可以處理不止一個事件,這個之前版本源碼不同,scanDirLock()負責掃描設備,openDeviceLock()負責生成設備相關信息,新版函數都在後面加了Lock。
讀過一些源碼之後,我思考了兩個問題
1.有些文章說InputReaderThread 和InputDispatcherThread都會在沒有事件時進入睡眠狀態。研讀源碼發現InputDispatcher::dispatchOnce()以及mLooper->pollOnce()確實在沒有事件需要處理時進行睡眠,但研讀InputRedaer源碼時,沒有了解其如何睡眠。
2.InputReader是如何和InputDispatcher交互的?因為老版本源碼,InputReader有getDispatcher()函數,但新版本替換為getListener()。
繼續研讀代碼發現答案:
1.InputReaderThread::loopOnce會休眠到EventHub::getEvents()中的epoll_wait(),epoll_wait()是系統調用,負責輪詢IO的。
2.getListener()是一個隊列 ,隊列裡面是一個Inputdispatcher對象。
明天繼續研讀,寫寫筆記免得自己忘掉。
1、完整生命周期上圖是Android Activity的生命周期圖,其中Resumed、Paused、Stopped狀態是靜態的,這三個狀態下的Activity存在時間較
如果我們在每個xml文件中都把相同的布局都重寫一遍,一個是代碼冗余,可讀性很差;另一個是修改起來比較麻煩,對後期的修改和維護非常不利
[android] 天氣app布局練習主要練習一下RelativeLayout和LinearLayout
接著上一篇博客,上一篇博客跟大家分享了三種開始頁面的定時跳轉,根據項目需求接下來就說一下向導頁面吧!幾乎每一個APP都有自己的向導頁面,一般都是第一次安裝的時或者第一次進