【发布时间】:2019-01-29 14:54:48
【问题描述】:
我正在将现有应用从 Java 转换为 Kotlin。
该应用程序创建了一个 IntentService,它在后台线程中运行,并负责执行一些操作,这些操作会使用suspend 函数重复且无限期地阻塞线程(例如网络调用、数据库交互)。
由于“当前线程”实际上是一个后台线程,我并没有阻塞 UI。
在当前线程上使用runBlocking 来运行所有挂起函数是一个好习惯吗?还是有更好的方法?
【问题讨论】:
-
服务的后台线程用于传递来自系统的通知。因此,如果您将其用于可能长时间的操作 - 您将无法从系统接收新事件。对于这种情况,您不需要任何
suspend函数来使用。另一种方法是将执行卸载到专用线程池,而不是为文本通知释放后台线程。在这里你可能更喜欢launch或async函数 -
我使用后台线程将数据发送到 Web 服务并每 x 秒更新一次应用程序数据库,并且该线程需要在后台运行数小时(为此我使用了 IntentService)。我将编辑我的问题以便更清楚
-
如果你打算阻塞线程,使用协程有什么意义?
-
@MarkoTopolnik 因为我需要使用一些已经定义的 Kotlin 函数,它们是挂起函数
标签: android multithreading kotlin kotlinx.coroutines