在整个Web和Stack Overflow上都有对UI Thread的事件队列的引用.例如,runOnUiThread()会将操作发布到UI线程的事件队列.但是我无法找到这个队列的详细描述,所以有人可以指点我一个详细的,或回答几个问题吗?
1.我知道这是一个队列,它包含"行动",但我有点不清楚"行动"是什么.动作方法调用是否带有相关参数,或者是线程本身的指令,还是什么?
2.所有线程都有事件队列还是只有UI线程?
3.如何查看事件队列中的内容或获取事件计数?
4.什么确切地决定了队列中的动作何时执行?
5. View类有一个名为cancelPendingInputEvents()的方法 ,用于" 取消先前发布到事件队列的任何延迟的高级输入事件 ".如果事件队列是线程的属性,为什么这是View类的方法,或者视图是否有一些不同的事件队列?
6.消息队列和事件队列是否有两个不同的队列?NB - 有人在这里询问了这个问题并且回答者开始说它们是同义词然后附加一个附录,这似乎意味着消息不同所以我不清楚最终的答案是什么.
run();每个runnables.Looper.prepare(),所以任何线程都可以拥有它们.有一个运行时异常,"无法在未调用Looper.prepare()的线程内创建处理程序"new Handler().然后通过调用将内容发布到该线程队列handler.post(Runnable)阅读文档总是有帮助的:
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 线程具有事件循环。
您无法查看事件队列或获取事件列表。您需要了解的内容将调用代码中的某些函数
线程会尽快执行事件。如果队列中没有事件,则线程将休眠。尽管框架可能会欺骗某些事件,但它们应该按顺序执行。
消息队列和事件队列是同一个东西。还有一个名为 MessageQueue 的类,它与我们在这里讨论的队列不同,但可以用来实现一个。
| 归档时间: | 
 | 
| 查看次数: | 3129 次 | 
| 最近记录: |