WEB开发网
开发学院手机开发Android 开发 android键盘映射 阅读

android键盘映射

 2010-07-15 21:14:00 来源:WEB开发网   
核心提示:里创建了一个线程,它循环的读取事件,android键盘映射(2),然后把事件放入事件队列里,Java代码:Thread mThread = new Thread("InputDeviceReader") {public void run() {android.os.Process.setThread
里创建了一个线程,它循环的读取事件,然后把事件放入事件队列里。

Java代码:

Thread mThread = new Thread("InputDeviceReader") {

public void run() {

android.os.Process.setThreadPriority(

android.os.Process.THREAD_PRIORITY_URGENT_DISPLAY);

try {

RawInputEvent ev = new RawInputEvent();

while (true) {

InputDevice di;

// block, doesn't release the monitor

readEvent(ev);

boolean send = false;

boolean configChanged = false;

if (false) {

Log.i(TAG, "Input event: dev=0x"

+ Integer.toHexString(ev.deviceId)

+ " type=0x" + Integer.toHexString(ev.type)

+ " scancode=" + ev.scancode

+ " keycode=" + ev.keycode

+ " value=" + ev.value);

}

if (ev.type == RawInputEvent.EV_DEVICE_ADDED) {

synchronized (mFirst) {

di = newInputDevice(ev.deviceId);

mDevices.put(ev.deviceId, di);

configChanged = true;

}

}

......

}

}

}

};

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

输入事件分发线程

在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 专门用来从设备读取按键事件,

代码:

Thread mThread = new Thread("InputDeviceReader") {

上一页  1 2 3 4 5 6  下一页

Tags:android 键盘 映射

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