如何同时在 android 上使用处理程序?

how to use handler on android concurrently?

我正在阅读 android 和 Kotlin 中的线程,我在一个教程中发现像这个例子这样的处理程序不能同时工作,它一个接一个地工作,但是因为处理器太快了我们可以注意区别 这是例子

 Handler().postDelayed({println("handler 1")},1000)
 Handler().postDelayed({println("handler 2")},1000)
 Handler().postDelayed({println("handler 3")},1000)

所以我问处理程序如何并发工作,或者换句话说,以异步方式工作,就像普通线程一样?

处理程序不能在同一线程中以异步方式工作。

处理程序允许您发送和处理与线程的 MessageQueue 关联的 Messages 和 Runnable 对象。每个 Handler 实例都与一个线程和该线程的消息队列相关联。 MessageQueue 是一个队列,其中包含将在特定线程中执行的任务(消息、可运行)列表。当您创建一个新的处理程序时,它会绑定到创建它的线程的 thread/message 队列——从那时起,它将向该消息队列传递消息和可运行对象,并在它们从消息队列。 Looper 负责保持线程存活。它是一种为当前线程提供 MessageQueue 服务的 worker。 Looper循环一个消息队列,将消息发送给相应的线程处理。

handler创建时,可以在构造函数中得到一个Looper对象,表示handler挂在哪个线程上。因此,将处理程序附加到不同的线程可以使它们成为异步的。在这里,您以相同的时间延迟在同一线程 MessageQueue 中发布可运行对象,因此它将按顺序执行。

要了解更多有关 Handler、Thread、Looper 和 Message Queue 的知识,您可以阅读这篇文章blog