协程中的 HandlerThread 替换

use*_*256 4 android kotlin kotlinx.coroutines

我有一些代码使用单个 HandlerThread 和 Handler 向它发送消息。有没有办法用协程来做到这一点?我不想每次都创建新的协程,我只想在 HandlerThread 上执行代码块。请帮忙

Rom*_*rov 6

如果您希望在主 Android 线程中执行代码块,那么您可以使用UI来自kotlinx-coroutines-android模块的上下文,如下所示:

launch(UI) { 
    ... // this block of code will be executed in main thread
}
Run Code Online (Sandbox Code Playgroud)

上面的代码段向主处理程序发送一条消息以执行您的代码。

如果您正在寻找用于后台工作的自定义处理程序线程,那么您可以通过以下两种方式之一创建单线程上下文。

通用方法newSingleThreadedContext()像这样使用:

val ctx = newSingleThreadedContext() // define your context

launch(ctx) { ... } // use it to submit your code there
Run Code Online (Sandbox Code Playgroud)

Android 特有的方法:创建新的 Android Handler,使用Handler.asCoroutineDispatcher()扩展将其转换为协程上下文扩展。然后您就可以使用launch发送您的代码块以供执行。

  • 每 2 秒创建一个新的协程是可以的。协程非常非常轻量。 (2认同)