我正在将一个现有的Java应用程序转换为Kotlin。该应用程序创建了一个运行在后台线程中的IntentService,并被指定执行一些操作,这些操作使用suspend函数反复且无限期地阻塞线程(例如网络调用、数据库交互)。由于“当前线程”实际上是一个后台线程,因此我不会阻塞UI界面。
在当前线程上使用runBlocking运行所有挂起函数是否是一种好的做法?还是有更好的方法?
在当前线程上使用runBlocking运行所有挂起函数是否是一种好的做法?还是有更好的方法?
这正是runBlocking
的用途。在协程中添加了runBlocking
,以在使用协程的用户与其他以阻塞方式执行代码块的地方之间建立桥梁。如果您希望线程被阻塞并等待协程的执行,则应始终使用runBlocking
。
suspend
函数进行操作。另一种选择是将执行卸载到专用线程池中,不释放后台线程以进行文本通知。在这里,您可能更喜欢使用launch
或async
函数。 - Eugene Petrenko