中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

豐都網(wǎng)站建設(shè)信息流推廣

豐都網(wǎng)站建設(shè),信息流推廣,wordpress主題less,黃岡麻城疫情在 Android 中,輸入事件(例如觸摸、按鍵)從硬件傳遞到應(yīng)用程序并最終由應(yīng)用層消費(fèi)。整個(gè)過程涉及多個(gè)系統(tǒng)層次,包括硬件層、Linux 內(nèi)核、Native 層、Framework 層和應(yīng)用層。我們將深入解析這一流程,并結(jié)合代碼逐步了解…

在 Android 中,輸入事件(例如觸摸、按鍵)從硬件傳遞到應(yīng)用程序并最終由應(yīng)用層消費(fèi)。整個(gè)過程涉及多個(gè)系統(tǒng)層次,包括硬件層、Linux 內(nèi)核、Native 層、Framework 層和應(yīng)用層。我們將深入解析這一流程,并結(jié)合代碼逐步了解輸入事件的傳遞。
 Architecture Diagram for the basic working model of the Android Input Subsystem

1. 輸入事件的產(chǎn)生與傳遞

輸入事件的產(chǎn)生是從硬件觸摸屏開始的。觸摸屏等輸入設(shè)備檢測(cè)到用戶的操作(如觸摸、滑動(dòng)),然后將這些事件傳遞給 Linux 內(nèi)核。

  • 硬件層(觸摸屏等):將物理觸摸或按鍵操作轉(zhuǎn)化為信號(hào)。
  • 內(nèi)核層:Linux 內(nèi)核中的 Input 子系統(tǒng)負(fù)責(zé)接收這些輸入信號(hào)并生成相應(yīng)的事件。

在 Android 系統(tǒng)中,輸入事件從硬件傳遞到應(yīng)用層的大致流程如下:

觸摸屏(硬件層) → Linux 內(nèi)核(Input子系統(tǒng)) → Native Input System(輸入事件解析與分發(fā))
→ Framework(事件管理) → 應(yīng)用層(事件消費(fèi))

2. Linux 內(nèi)核:輸入事件的生成與處理

內(nèi)核的 Input 子系統(tǒng)接收到輸入事件后,將其轉(zhuǎn)化為 input_event 結(jié)構(gòu)。每個(gè)輸入事件包括三部分:

  • type:事件的類型,例如 EV_ABS 表示絕對(duì)坐標(biāo)事件。
  • code:事件的具體代碼,例如 ABS_X 表示 X 軸坐標(biāo)。
  • value:事件的值,例如坐標(biāo)值。
代碼示例

在 Linux 內(nèi)核中,輸入事件使用以下結(jié)構(gòu)定義:

struct input_event {struct timeval time;  // 事件發(fā)生時(shí)間__u16 type;           // 事件類型__u16 code;           // 事件代碼__s32 value;          // 事件值
};

當(dāng)觸摸屏收到用戶的操作時(shí),會(huì)產(chǎn)生一系列 input_event 事件,傳遞到 Linux Input 子系統(tǒng)。然后,內(nèi)核會(huì)將這些事件通過 /dev/input/eventX 文件接口暴露給用戶態(tài)。

3. Native 層:InputReader 和 InputDispatcher

Android 使用 InputReaderInputDispatcher 這兩個(gè)關(guān)鍵組件來處理輸入事件。

  • InputReader:從 Linux /dev/input/eventX 接口讀取事件,并解析為 Android 系統(tǒng)可以理解的 MotionEvent 或 KeyEvent。
  • InputDispatcher:將 InputReader 解析后的事件分發(fā)給應(yīng)用程序的 Window。
    在 Android 系統(tǒng)中,InputManagerService 是輸入系統(tǒng)的核心服務(wù),它在系統(tǒng)啟動(dòng)時(shí)被創(chuàng)建,并負(fù)責(zé)管理整個(gè)輸入事件的讀取和分發(fā)。
InputReader 代碼流程

InputReader 中,EventHub 類負(fù)責(zé)打開 /dev/input/eventX 設(shè)備文件并讀取事件。

void EventHub::openDevice(const char* deviceName) {// 打開設(shè)備文件int fd = open(deviceName, O_RDWR);// 將設(shè)備文件添加到輸入設(shè)備列表中mDevices.push_back(fd);
}

InputReader::loopOnceInputReader 的核心處理函數(shù),它不斷從事件隊(duì)列中讀取事件并處理。

void InputReader::loopOnce() {// 讀取事件processEvents();// 處理事件dispatchEvent();
}
InputDispatcher 代碼流程

InputDispatcher 使用 dispatchEvent 方法將事件分發(fā)到合適的 WindowActivity

void InputDispatcher::dispatchEvent(const Event& event) {// 獲取目標(biāo) Windowsp targetWindow = getTargetWindow(event);// 將事件發(fā)送給目標(biāo) WindowtargetWindow->sendEvent(event);
}

4. Framework 層:事件分發(fā)(WindowManagerService)

在 Framework 層,InputManagerService 將事件傳遞給 WindowManagerServiceWindowManagerService 負(fù)責(zé)管理所有窗口的輸入焦點(diǎn),并將事件轉(zhuǎn)發(fā)給有焦點(diǎn)的窗口。

代碼流程

WindowManagerService 中的 dispatchPointerEvent 方法會(huì)根據(jù)窗口焦點(diǎn)來分發(fā)事件。

public void dispatchPointerEvent(MotionEvent event) {// 獲取焦點(diǎn)窗口WindowState focusedWindow = getFocusedWindow();if (focusedWindow != null) {// 將事件發(fā)送到焦點(diǎn)窗口focusedWindow.sendInputEvent(event);}
}

5. 應(yīng)用層:事件消費(fèi)(View 和 Activity)

最終,事件到達(dá)應(yīng)用層。對(duì)于觸摸事件,Android 使用 onTouchEvent 方法處理,而對(duì)于按鍵事件,則使用 onKeyDown、onKeyUp 等方法處理。

示例代碼

ActivityView 中,可以通過重寫 onTouchEvent 來消費(fèi)事件。

@Override
public boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:// 處理按下事件break;case MotionEvent.ACTION_MOVE:// 處理移動(dòng)事件break;case MotionEvent.ACTION_UP:// 處理抬起事件break;}return super.onTouchEvent(event);
}

總結(jié)

  • 硬件層:產(chǎn)生輸入事件并傳遞到內(nèi)核。
  • Linux 內(nèi)核:接收輸入信號(hào)并轉(zhuǎn)化為 input_event。
  • Native 層:InputReader 和 InputDispatcher 解析和分發(fā)事件。
  • Framework 層:WindowManagerService 負(fù)責(zé)將事件傳遞給對(duì)應(yīng)的窗口。
  • 應(yīng)用層:Activity 和 View 接收并消費(fèi)事件。
    這一整套流程保證了從物理輸入到應(yīng)用響應(yīng)的鏈路完整性和效率。

參考

Android Input Framework Architecture

http://www.risenshineclean.com/news/36822.html

相關(guān)文章:

  • 用html5做的網(wǎng)站素材山東seo百度推廣
  • 做網(wǎng)站的服務(wù)器怎么弄什么網(wǎng)站推廣比較好
  • 做優(yōu)惠券網(wǎng)站賺錢嗎seo整站怎么優(yōu)化
  • 在搜狐快站上做網(wǎng)站怎么跳轉(zhuǎn)我的百度賬號(hào)登錄
  • wordpress 電商網(wǎng)站百度首頁(yè) 百度一下
  • 口碑好的揚(yáng)州網(wǎng)站建設(shè)指數(shù)是什么
  • 淘寶客的api怎么做網(wǎng)站高端定制網(wǎng)站建設(shè)公司
  • 企術(shù)建站公司網(wǎng)站設(shè)計(jì)方案
  • wordpress插件放哪兒的獨(dú)立站seo是什么
  • 重慶整合營(yíng)銷網(wǎng)站建設(shè)百度百家自媒體平臺(tái)注冊(cè)
  • 網(wǎng)站建設(shè)和網(wǎng)站搭建哪個(gè)好合肥百度推廣優(yōu)化排名
  • 五金塑膠 技術(shù)支持 東莞網(wǎng)站建設(shè)百度競(jìng)價(jià)托管一月多少錢
  • 青海省城鄉(xiāng)建設(shè)廳網(wǎng)站寧德市人口
  • 做網(wǎng)站為什么圖片上傳不了整站優(yōu)化系統(tǒng)
  • 深圳網(wǎng)站建設(shè)公司地址產(chǎn)品推廣方法有哪些
  • 藁城專業(yè)網(wǎng)站建設(shè)百度商城購(gòu)物
  • 成都網(wǎng)站建設(shè) 創(chuàng)新互聯(lián)今日搜索排行榜
  • 重慶樓市最新消息seo用什么工具
  • wordpress move導(dǎo)入數(shù)據(jù)搜索引擎排名優(yōu)化
  • 建設(shè)網(wǎng)站去工信部備案需要什么資料網(wǎng)站seo的內(nèi)容是什么
  • 做返利網(wǎng)站能賺錢的免費(fèi)入駐的電商平臺(tái)
  • 網(wǎng)站建設(shè)常用問題庫(kù)黑帽seo是什么
  • 門店管理系統(tǒng)有哪些寧波免費(fèi)seo在線優(yōu)化
  • 東莞模板網(wǎng)頁(yè)制作惠州seo網(wǎng)站排名
  • 橋梁畢業(yè)設(shè)計(jì)代做網(wǎng)站6個(gè)好用的bt種子搜索引擎
  • 網(wǎng)站建設(shè)的需要分析做網(wǎng)絡(luò)優(yōu)化的公司排名
  • 長(zhǎng)沙的企業(yè)網(wǎng)站建設(shè)陜西網(wǎng)站設(shè)計(jì)
  • DW做旅游網(wǎng)站模板正規(guī)拉新推廣平臺(tái)有哪些
  • 網(wǎng)站建設(shè)業(yè)務(wù)文案亞洲長(zhǎng)尾關(guān)鍵詞挖掘
  • 湛江論壇建站模板集客營(yíng)銷軟件官方網(wǎng)站