WEB开发网
开发学院手机开发Android 开发 Android事件处理分 阅读

Android事件处理分

 2010-09-10 00:47:00 来源:WEB开发网   
核心提示:}}......}}}};按键、触摸屏流、轨迹球程分析输入事件分发线程在frameworks/base/services/java/com/android/server/WindowManagerService.java里创建了一个输入事件分发线程,它负责把事件分发到相应的窗口上去,Android事件处理分(4),按键

}

}

......

}

}

}

};

按键、触摸屏流、轨迹球程分析

输入事件分发线程

在frameworks/base/services/java/com/android/server/WindowManagerService.java里创建了一个输入事件分发线程,它负责把事件分发到相应的窗口上去。

按键触摸屏流程分析:

WindowManagerService类的构造函数

WindowManagerService()

mQueue = new KeyQ();

因为 WindowManagerService.java (frameworksaseservicesjavacomandroidserver)中有:

private class KeyQ extends KeyInputQueue implements KeyInputQueue.FilterCallback

KeyQ 是抽象类 KeyInputQueue 的实现,所以 new KeyQ类的时候实际上在 KeyInputQueue 类中创建了一个线程 InputDeviceReader 专门用来从设备读取按键事件,

+ expand sourceview plaincopy to clipboardprint?

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150

Thread mThread = new Thread("InputDeviceReader") {

public void run() {

// 在循环中调用:

readEvent(ev);

...

send = preprocessEvent(di, ev);

//实际调用的是 KeyQ 类的 preprocessEvent 函数

...

int keycode = rotateKeyCodeLocked(ev.keycode);

int[] map = mKeyRotationMap;

for (int i=0; i< i+="2)">

if (map == keyCode)

return map[i+1];

} //

addLocked(di, curTime, ev.flags,RawInputEvent.CLASS_KEYBOARD,

newKeyEvent(di, di.mDownTime, curTime, down,keycode, 0, scancode,...));

QueuedEvent ev = obtainLocked(device, when, flags, classType, event);

}

};

Thread mThread = new Thread("InputDeviceReader") {

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:Android 事件 处理

编辑录入:coldstar [复制链接] [打 印]
赞助商链接