在Coroutines中更换HandlerThread

时间:2018-04-14 10:40:49

标签: android kotlin kotlinx.coroutines

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

1 个答案:

答案 0 :(得分:1)

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

launch(UI) { 
    ... // this block of code will be executed in main thread
}

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

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

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

val ctx = newSingleThreadedContext() // define your context

launch(ctx) { ... } // use it to submit your code there

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