这是重复使用处理程序的示例吗?

时间:2018-09-02 10:08:05

标签: java android handler looper

如果多个Handler使用同一个Looper,是否有意义?

例如:

private Handler firstHandler = new Handler(Looper.getMainLooper());
private Handler secondHandler = new Handler(Looper.getMainLooper());
firstHandler.post(...);
secondHandler.post(...);

...它们都发布到主线程,拥有第二个线程是没有意义的吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

  

这是重复使用处理程序的示例吗?

是的

引自Docs

  

处理程序允许您发送和处理Message和Runnable对象   与线程的MessageQueue相关联。每个处理程序实例为   与单个线程和该线程的消息队列相关联。什么时候   您创建一个新的处理程序,它绑定到的线程/消息队列   创建它的线程-从那时起,它将交付   消息和可运行对象到该消息队列,并在它们执行时执行   从消息队列中出来。

那些处理程序正在向同一个MessageQueue发送消息,因此无论如何第二个都将在第一个完成后运行,这意味着多余。

此外,Handler与它在默认情况下创建的Thread相关联。因此,如果在Handler上创建了main thread,则不必指定Looper。

答案 1 :(得分:0)

是的,两个处理程序都指向相同的"MessageQueue"。可以从以下链接获得更多信息:

What is the purpose of Looper and how to use it?