【发布时间】:2020-10-10 15:19:04
【问题描述】:
我一直在努力将 Kotlin 协程中的值返回给 Java,这感觉太久了。这就是我最终让它工作的方式,但我不能 100% 确定这是最好的方法。 返回 Kotlin 时获得返回值的方式不起作用。我只是用 SQLite db 中的总行数更新 UI。
这是我从主线程的 Java(活动)调用
tv.setText(String.valueOf(DbUtil.getDbRowCount()));
这是 DbUtil(Kotlin 对象类)中的方法
@JvmStatic
fun getDbRowCount(): Int = runBlocking {
withContext(IO){DbHelper.getInstance().dbRowCount}
}
我的问题:
- 添加 withContext(IO) 是否可以防止主线程被阻塞?
- 如果这确实阻塞,我该如何重写它以使其不会阻塞。
【问题讨论】:
-
> 可以,但是这样可以吗?,它不会有任何将它分派到IO池的效果,它会阻塞调用线程,并且您似乎正在更改值一个 UI 元素,所以你很可能是从主线程调用它,所以它可能会带来不稳定的体验,因为主线程将被阻塞直到函数返回。
-
@AnimeshSahu 查看我的附加编辑
标签: java android kotlin kotlin-coroutines