【发布时间】:2019-02-19 05:33:30
【问题描述】:
我正在学习 Kotlin 协程。我读过runBlocking 是桥接同步和异步代码的方法。但是如果runBlocking 停止 UI 线程,性能提升是多少?
比如我需要在Android中查询一个数据库:
val result: Int
get() = runBlocking { queryDatabase().await() }
private fun queryDatabase(): Deferred<Int> {
return async {
var cursor: Cursor? = null
var queryResult: Int = 0
val sqlQuery = "SELECT COUNT(ID) FROM TABLE..."
try {
cursor = getHelper().readableDatabase.query(sqlQuery)
cursor?.moveToFirst()
queryResult = cursor?.getInt(0) ?: 0
} catch (e: Exception) {
Log.e(TAG, e.localizedMessage)
} finally {
cursor?.close()
}
return@async queryResult
}
}
查询数据库会停止主线程,所以看起来它需要与同步代码相同的时间?如果我遗漏了什么,请纠正我。
【问题讨论】:
标签: android kotlin kotlin-coroutines