Android InputReader 輸入事件處理流程

Android系統輸入事件產生的底層主要是輸入子系統,Android 中的輸入設備有很多,例如屏幕,鼠標,鍵盤等都是輸入設備,對于應用開發者,接觸最多的也就是屏幕了。

1. 當輸入設備可用時,Linux會在 /dev/input 中創建對應的設備節點。

2. 用戶操作輸入設備就會產生各種事件,這些事件的原始信息就會被 Linux內核中的輸入子系統采集,原始信息由 Kernel space 的驅動層一直傳遞到設備結點。

3. InputReader讀取設備節點數據并對輸入事件信息進行加工處理,加工處理后的事件會交給 InputDispatcher 來處理。

以下是InputReader創建InputDevice設備、讀取事件和交給InputDispatcher事件的調用流程

@frameworks/native/services/inputflinger/reader/InputReader.cpp
InputReader::startloopOnce()processEventsLocked(mEventBuffer, count);case EventHubInterface::DEVICE_ADDED: addDeviceLocked(rawEvent->when, rawEvent->deviceId);  //添加設備InputDeviceIdentifier identifier = mEventHub->getDeviceIdentifier(eventHubId);if(identifier.vendor == 8183 && identifier.product == 4084) { return; }  //根據keyboard設備類型判斷,不添加設備,以免vd啟動異常std::shared_ptr<InputDevice> device = createDeviceLocked(eventHubId, identifier)
@frameworks/native/services/inputflinger/reader/InputDevice.cpp                device->addEventHubDevice(eventHubId);  //添加觸摸光標設備if (classes.test(InputDeviceClass::BATTERY) || classes.test(InputDeviceClass::LIGHT)) {  mController = std::make_unique<PeripheralController>(*contextPtr); }if (classes.test(InputDeviceClass::CURSOR)) { mappers.push_back(std::make_unique<CursorInputMapper>(*contextPtr)); }//addDeviceLocked Device added: id=3, eventHubId=8, name='hyn_ts', descriptor='dd768709fe8e1221a31cd1cbe2fb6da013ae6c46',sources=0x00002002mDevices.insert({eventHubId, std::make_pair(std::move(contextPtr), std::move(mappers))});            processEventsForDeviceLocked(deviceId, rawEvent, batchSize);auto deviceIt = mDevices.find(eventHubId);device->process(rawEvents, count);
@frameworks/native/services/inputflinger/reader/InputDevice.cppfor_each_mapper_in_subdevice(rawEvent->deviceId, [rawEvent](InputMapper& mapper)auto deviceIt = mDevices.find(eventHubDevice);   //eventHubDevice=8
@frameworks/native/services/inputflinger/reader/mapper/CursorInputMapper.cpp                        mapper.process(rawEvent);  //CursorInputMapper::processmCursorButtonAccumulator.process(rawEvent);mCursorMotionAccumulator.process(rawEvent);mCursorScrollAccumulator.process(rawEvent);sync(rawEvent->when, rawEvent->readTime);getListener()->notifyMotion(&args);InputDispatcher::notifyMotionmPolicy->interceptMotionBeforeQueueing(args->displayId, args->eventTime, /*byref*/ policyFlags);needWake = enqueueInboundEventLocked(std::move(newEntry));mInboundQueue.push_back(std::move(newEntry)); //放入mInboundQueue隊列

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/36864.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/36864.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/36864.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tensorRT的安裝

在這個網址找到適合自己的版本&#xff0c;尤其是找到合適的cuda版本&#xff1a; https://pypi.nvidia.com/ 然后直接pip 安裝&#xff1a; 比如&#xff1a; pip install https://pypi.nvidia.com/tensorrt-cu11/tensorrt-cu11-10.1.0.tar.gz 也可以&#xff1a; wget http…

【MotionCap】SLAHMR 在 Colab 的demo運行筆記

【MotionCap】SLAHMR slahmr將人類和相機運動與野外視頻分離 CVPR 2023跳至主要內容 SLAHMR (supports 4D Humans).ipynb SLAHMR (supports 4D Humans).ipynb_筆記本已移除星標Google Colab demo for: SLAHMR - Simultaneous Localization And Human Mesh Recovery @inproc…

STM32將外部SDRAM空間作為系統堆(Heap)空間

概述 stm32可以外擴很大的sram&#xff0c;常見外部sram的初始化函數一般是c語言寫的&#xff0c;默認寫在main函數里面。stm32初始化首先進入匯編代碼startup_stm32f429xx.s&#xff0c;在匯編代碼中Reset_Handler&#xff08;復位中斷服務程序&#xff09;里面先調用了Syste…

線上書店訂購系統小組作業匯總

1、數據庫模型圖、er圖1、數據庫模型圖、er圖-CSDN博客 2、網上圖書訂購2、網上圖書訂購-CSDN博客 3、簡單查詢與多表聯合復雜查詢MySQL周內訓參照3、簡單查詢與多表聯合復雜查詢-CSDN博客 4、觸發器-插入-修改-刪除MySQL周內訓參照4、觸發器-插入-修改-刪除-CSDN博客 5、存…

亮相夏季達沃斯論壇天津之夜,國窖1573展現國際化新表達

執筆 | 姜 姜 編輯 | 揚 靈 6月25日-27日&#xff0c;以“未來增長的新前沿”為主題的第十五屆新領軍者年會&#xff0c;即2024年夏季達沃斯論壇盛大舉行。26日晚&#xff0c;在2024年夏季達沃斯論壇天津之夜上&#xff0c;國窖1573作為中國民族品牌的代表&#xff0c;以唯一攜…

vue + Lodop 制作可視化設計頁面 實現打印設計功能(二)

歷史&#xff1a; vue2 Lodop 制作可視化設計頁面 實現打印設計功能&#xff08;一&#xff09; 前言&#xff1a; 之前本來打算用直接拿之前做的vue2版本改改就發的&#xff0c;但考慮到現在主流都是vue3了&#xff0c;所以從這篇文章開始使用vue3來寫&#xff0c;以及最后…

速盾:cdn加速js

CDN加速是一種將網站內容分布到全球各地的服務器上來提高網站訪問速度和穩定性的技術手段。CDN即內容分發網絡&#xff0c;其核心原理是將靜態資源&#xff08;例如圖片、CSS、JavaScript文件等&#xff09;緩存到離用戶最近的服務器節點上&#xff0c;使用戶可以更快地獲取網站…

三相LCL濾波型PWM逆變器仿真設計

參考并網電流外環電容電流前饋內環的雙閉環控制結構&#xff0c;在光伏和風力發電網側變換器中的應用&#xff0c;可以顯著提高系統的穩定性和效率。在并網電流外環中&#xff0c;通過檢測電網電流并與其參考值進行比較&#xff0c;可以得到一個電流誤差信號。這個電流誤差信號…

MySQL基礎查詢與復雜查詢

基礎查詢 1、查詢用戶信息&#xff0c;僅顯示用戶的姓名與手機號&#xff0c;用中文顯示列名。中文顯示姓名列與手機號列。 2、根據商品名稱進行模糊查詢&#xff0c;模糊查詢需要可以走索引&#xff0c;需要給出explain語句。使用explain測試給出的查詢語句&#xff0c;需要顯…

程序員職業發展指南,如何選擇適合自己的就業方向?

隨著科技的發展和數字化時代的到來&#xff0c;程序員是IT行業中的熱門職業。尤其是近幾年移動互聯網的迅速發展&#xff0c;IT人才更是緊缺&#xff0c;越來越多的人加入程序員這個行列。 從事程序員工作&#xff0c;如何接項目呢&#xff1f;YesPMP是一個專注于互聯網外包的平…

【知識學習】闡述Unity3D中動畫渲染的概念及使用方法示例

Unity3D中的卡通渲染&#xff08;Cartoon Rendering&#xff09;是一種渲染技術&#xff0c;它模仿傳統手繪動畫或漫畫的視覺效果。這種渲染風格通常具有鮮明的顏色、清晰的輪廓線和簡化的光影效果&#xff0c;常用于制作動畫、游戲和其他視覺媒體。 卡通渲染的基本概念 輪廓…

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件

<sa8650>QCX ISP Tuning 使用詳解 — Tuning前置條件 一 如何安裝 Qualcomm Chromatix? 攝像頭校準工具二 如何使用 Qualcomm Chromatix? tuning工具創建tuning項目2.1 創建工程前提依賴2.2 創建工程2.3 添加場景2.4 編輯區域觸發器三 如何創建Tuning 樹一 如何安裝 Qualco…

postman教程-22-Newman結合Jenkins執行自動化測試

上一小節我們學習了Postman Newman運行集合生成測試報告的方法&#xff0c;本小節我們講解一下Postman Newman結合Jenkins執行自動化測試的方法。 在軟件開發過程中&#xff0c;持續集成&#xff08;CI&#xff09;是一種實踐&#xff0c;旨在通過自動化的測試和構建過程來頻繁…

【高等數學】一元函數積分及其應用:定積分與反常積分

文章目錄 第一節. 定積分一. 定積分的概念1. 定義2. 定積分存在定理3. 定積分的幾何意義與求解 二. 定積分的性質1. 不等式2. 中值定理 三. 積分上限&#xff08;為x&#xff09;函數1. 積分上限函數定義2. 積分函數求導3. 積分函數的奇偶性變化 四. 定積分的計算 第二節. 反常…

multiprocessing.Queue 多個進程生產和多個進程消費怎么處理

在這個示例中&#xff0c;我們創建了一個隊列 q&#xff0c;并通過 multiprocessing.Manager().Queue() 來確保隊列可以在多個進程之間共享。我們定義了 consumer 和 producer 函數&#xff0c;分別用于從隊列中獲取數據和向隊列中放入數據。 在主進程中&#xff0c;我們創建了…

IPython的使用技I巧整理

IPython 是一個強大的交互式 Python 解釋器&#xff0c;它提供了許多增強 Python 編程體驗的特性。以下是一些 IPython 的使用技巧&#xff1a; 自動補全&#xff1a; 按下 Tab 鍵可以自動完成代碼。 自動縮進&#xff1a; IPython 會自動縮進代碼&#xff0c;保持代碼格式整潔…

vue的ESLint 4格縮進 筆記

https://chatgpt.com/share/738c8560-5271-45c4-9de0-511fad862109 一&#xff0c;代碼4格縮進設置 .eslintrc.js文件 module.exports { "rules": { "indent": ["error", 4] } }; 自動修復命令 npx eslint --fix "src/**/*.{…

作為圖形渲染API,OpenGL和Direct3D的全方位對比。

當你在網頁看到很多美輪美奐的圖形效果&#xff0c;3D交互效果&#xff0c;你知道是如何實現的嗎&#xff1f;當然是借助圖形渲染API了&#xff0c;說起這個不就不得說兩大陣營&#xff0c;OpenGL和Direct3D&#xff0c;貝格前端工場在本文對二者做個詳細對比。 一、什么是圖形…

springboot實習管理系統的設計與實現 LW +PPT+源碼+講解

第三章系統分析與設計 3.1 可行性分析 一個完整的系統&#xff0c;可行性分析是必須要有的&#xff0c;因為他關系到系統生存問題&#xff0c;對開發的意義進行分析&#xff0c;能否通過本系統來補充線下實習管理模式中的缺陷&#xff0c;去解決其中的不足等&#xff0c;通過對…

專業技術!最新氧化物異質結納米制備技術

網盤 https://pan.baidu.com/s/1vjO2yLxm638YpnqDQmX7-g?pwd3at5 MOF衍生的B_A_B結構氧化物異質結及其制備方法和應用.pdf 二硫化鉬-硫化鎘納米復合材料及其制備方法和應用.pdf 具有異質界面的耐輻照復合薄膜及其制備方法與應用.pdf 基于異質結雙界面層納米材料的復合介電薄膜…