到目前为止,每当我想要访问数据库时,我都使用以下模式:
runBlocking {
launch {
// fetch something from the database and put it to some view
}
}
现在我深入研究Kotlin协程,越来越确信这是一种不好的模式。基本上,我可能只要allowMainThreadQueries
,因为我的模式无论如何都会阻塞主线程。
不幸的是,我还没有找到一个合适的模式。如何有效地使用Kotlin协程访问数据库?
runBlocking
是进入协程的唯一入口吗?
考虑以下场景:
override fun onCreate() {
setContentView(someLayout)
// concurrently fetch something from the database and put it in some view
// onCreate may return before this has finished
someButton.setOnClickListener {
// concurrently insert or update something in the database
}
}
allowMainThreadQueries
,这听起来好像是在使用 Room。您为什么不使用 Room 内置的支持 Kotlin Flow / 协程进行异步查询呢?(https://developer.android.com/training/data-storage/room/async-queries) - ianhanniballakerunBlocking
调用挂起函数,实际上他们没有使用它们,可以使用allowMainThreadQueries
来获得相同的结果,这是正确的。 - Tenfour04