Kotlin runBlocking在后台线程上运行

6
我正在将一个现有的Java应用程序转换为Kotlin。该应用程序创建了一个运行在后台线程中的IntentService,并被指定执行一些操作,这些操作使用suspend函数反复且无限期地阻塞线程(例如网络调用、数据库交互)。由于“当前线程”实际上是一个后台线程,因此我不会阻塞UI界面。
在当前线程上使用runBlocking运行所有挂起函数是否是一种好的做法?还是有更好的方法?

1
您的服务的后台线程用于从系统中传递通知。因此,如果您将其用于潜在的长时间操作,则将无法接收来自系统的新事件。对于这种情况,您不需要任何suspend函数进行操作。另一种选择是将执行卸载到专用线程池中,不释放后台线程以进行文本通知。在这里,您可能更喜欢使用launchasync函数。 - Eugene Petrenko
我使用后台线程向webservice发送数据并每x秒更新应用程序数据库,该线程需要在后台运行,可能需要数小时(我使用IntentService实现此目的)。我将编辑我的问题以使其更清晰。 - Simone
2
如果您计划阻塞线程,使用协程的意义何在? - Marko Topolnik
@MarkoTopolnik 因为我需要使用一些已定义的 Kotlin 函数,它们是挂起函数。 - Simone
1个回答

4

这正是runBlocking的用途。在协程中添加了runBlocking,以在使用协程的用户与其他以阻塞方式执行代码块的地方之间建立桥梁。如果您希望线程被阻塞并等待协程的执行,则应始终使用runBlocking


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接