在MessageQueue中,有两个重要的方法:一个是
enqueueMessage
,负责将消息加入队列;一个是next
,负责从消息队列中取出一个待处理的消息。
// android.os.MessageQueue
MessageQueue {
boolean enqueueMessage(Message msg, long when) {
// ...
}
Message next() {
// ...
for (;;) {
// ...
nativePollOnce(ptr, nextPollTimeoutMillis);
// ...
}
}
}
在从消息队列中取出下一条消息时,会调用
nativePollOnce
方法,进入native层,在native中经过一系列处理,最终会回调到Framework层InputEventReceiver.java的dispatchInputEvent
方法。
native中的处理及整个完整的过程,欢迎参考Gityuan的Input系统—事件处理全过程一文。
android.view.InputEventReceiver.java:
// Called from native code.
@SuppressWarnings("unused")
private void dispatchInputEvent(int seq, InputEvent event, int displayId) {
mSeqMap.put(event.getSequenceNumber(), seq);
onInputEvent(event, displayId);
}
下面用图表示流程,具体代码以后有时间加上。
作者:ShenYong812