我正在阅读有关 android 和 Kotlin 中的线程的内容,我在一篇教程中发现像本示例这样的处理程序不能同时工作,而是一个接一个地工作,但由于处理器速度太快,我们无法注意到其中的差异 这是例子
Handler().postDelayed({println("handler 1")},1000)
Handler().postDelayed({println("handler 2")},1000)
Handler().postDelayed({println("handler 3")},1000)
所以我问处理程序如何像普通线程一样并发工作,或者换句话说,以异步方式工作?
Handler 不能在同一个线程中以异步方式工作。
处理程序允许您发送和处理与线程的 MessageQueue 关联的消息和 Runnable 对象。每个 Handler 实例都与一个线程和该线程的消息队列相关联。 MessageQueue 是一个队列,其中包含将在某个线程中执行的任务(消息、可运行)列表。当您创建一个新的处理程序时,它会绑定到创建它的线程的线程/消息队列 - 从那时起,它将向该消息队列传递消息和可运行对象,并在它们从消息队列中出来时执行它们。循环器负责保持线程活动。它是一种为当前线程提供 MessageQueue 的工作线程。 Looper循环一个消息队列,将消息发送到相应的线程去处理。
当创建handler时,它可以在构造函数中获取一个Looper对象,该对象指示handler附加到哪个线程。因此,将处理程序附加到不同的线程可以使它们异步。在这里,您将可运行对象以相同的时间延迟发布到同一线程 MessageQueue 中,因此它将按顺序执行。
想要了解更多关于Handler、Thread、Looper、消息队列的知识可以阅读这篇博客