我只是看到了三种方法的文档,当我们在工作线程中工作时,可用于在UI线程中执行一段代码。方法是:
public final void runOnUIThread(Runnable action)-在UI线程上运行指定的操作。如果当前线程是UI线程,则立即执行该操作。如果当前线程不是UI线程,则将操作发布到UI线程的事件队列中。
public boolean post(Runnable action)-导致将Runnable添加到消息队列。可运行对象将在用户界面线程上运行。
public boolean postDelayed(Runnable action,long delayMillis)-导致将Runnable添加到消息队列中,并在经过指定的时间后运行。可运行对象将在用户界面线程上运行。
第一个将Runnable发布到UI线程的事件队列中,而其他两个将Runnable添加到消息队列中。请告诉我两者的区别?
我的网络搜索告诉我,事件队列只是等待线程执行的事件队列。我不清楚消息队列。 MessageQueue也是某个类,这与此相关吗?
谢谢你。
我认为两者是同义词。事件通过消息指示给系统。
这两种方法之间的真正区别在于,一种方法将其立即添加到队列中,而另一种方法将其延迟指定的数量。
编辑:有关消息的更多信息
消息是独立线程之间的一种通信方式。在某种程度上,这很像当您在浏览器中打开一个网站时发生的通信:您向服务器发送一条消息,详细说明您到底想要的是什么(获取www.stackoverflow.com,我将接受以下内容字符编码,请不要跟踪我,等等),这使服务器作为邮件的收件人进行某些操作(从数据库中检索内容,呈现页面等),并通过邮件将其结果传达给您。] >
它的工作方式是这样的:线程已附加一个Looper
。它所做的所有工作都会在连续循环中永远运行,每次迭代都要检查其消息队列中是否有任何消息。如果没有,则转到下一个周期。如果存在,它将检索第一条消息进行处理。
但是,循环程序本身不知道任何消息的含义-它只是在循环。只是为循环程序运行提供基础结构的线程也没有。循环程序真正知道的是谁去处理消息:Handler
之一。它将消息传递给处理程序,该处理程序现在可以执行处理消息所需的所有操作。