提问者:小点点

想了解更多关于AndroidUI线程的事件队列


网络上和Stack Overflow上都有对UI线程事件队列的引用。例如runOnUiThread()将向UI线程的事件队列发布一个操作。但是我还没有找到这个队列的详细描述,所以有人能给我指出一个详细的,或者回答几个问题吗?

1.我知道它是一个队列,它包含“动作”,但我有点不清楚“动作”是什么。动作是带有关联参数的方法调用,还是对线程本身的指令,还是什么?

2.所有线程都有事件队列还是只有UI线程?

3.如何查看事件队列中的内容或获取事件计数?

4.队列中的一个动作什么时候执行,到底是什么决定的?

5. View类有一个方法,叫做取消PendingInputEvents(),用于“取消之前发布到事件队列的任何延迟的高级输入事件”如果事件队列是线程的属性,为什么这是View类的方法,或者视图有一些不同的事件队列吗?

6.消息队列和事件队列是两个不同的队列吗?注意:有人在SO问这个问题,回答者一开始说它们是同义词,然后附加了一个附录,似乎暗示消息是不同的,所以我不清楚最终的答案是什么。


共2个答案

匿名用户

    null

阅读文档总是很有帮助的:

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的类,它与我们在这里讨论的队列不同,但可以用来实现一个。

相关问题