网络上和Stack Overflow上都有对UI线程事件队列的引用。例如runOnUiThread()将向UI线程的事件队列发布一个操作。但是我还没有找到这个队列的详细描述,所以有人能给我指出一个详细的,或者回答几个问题吗?
1.我知道它是一个队列,它包含“动作”,但我有点不清楚“动作”是什么。动作是带有关联参数的方法调用,还是对线程本身的指令,还是什么?
2.所有线程都有事件队列还是只有UI线程?
3.如何查看事件队列中的内容或获取事件计数?
4.队列中的一个动作什么时候执行,到底是什么决定的?
5. View类有一个方法,叫做取消PendingInputEvents(),用于“取消之前发布到事件队列的任何延迟的高级输入事件”如果事件队列是线程的属性,为什么这是View类的方法,或者视图有一些不同的事件队列吗?
6.消息队列和事件队列是两个不同的队列吗?注意:有人在SO问这个问题,回答者一开始说它们是同义词,然后附加了一个附录,似乎暗示消息是不同的,所以我不清楚最终的答案是什么。
阅读文档总是很有帮助的:
https://developer.android.com/reference/android/os/Handler.html
https://developer.android.com/reference/android/os/MessageQueue.html
这只是一个标准的消息循环,就像每个GUI平台使用的那样。“事件”是一个CS术语,不是一个特定的对象。想象一下,在Android框架中,你会看到这样的东西:
MessageQueue queue;
void run(){
while(1){
queue.waitForEvent();
Message msg = queue.getEvent();
//Handle msg
}
}
只有UI线程有事件循环,尽管您可以在另一个线程上编写自己的事件循环。
您无法看到事件队列或获取事件列表。您需要了解的将在您的代码中调用某个函数
事件会在线程可以执行的时候尽快执行。如果队列中没有事件,线程就会Hibernate。它们应该按顺序执行,尽管框架可能会在某些事件上作弊。
消息队列和事件队列是一回事。还有一个名为MessageQueue的类,它与我们在这里讨论的队列不同,但可以用来实现一个。