如何制作从协程返回值的函数?

时间:2020-05-22 15:41:55

标签: android kotlin-coroutines

我想编写一个始终在UI /主线程上调用的函数。在该函数中,它将在后台线程上获取文本(需要从设备上的文件访问某些内容),然后将该文本返回到主线程。可以以惯用的方式使用协程吗?

这是我到目前为止所做的,但是我担心它会在主线程上运行:

.required

我想在Android活动中使用此功能:

.required

我正在寻找与使用回调处理异步线程类似的行为,但显然没有回调部分。

为了便于讨论,假设我不能使用LiveData或ViewModels。

1 个答案:

答案 0 :(得分:1)

您需要一个suspend函数

suspend fun getDisplayableName(context: Context): String =
    if(someCondition) {
        context.getString(R.string.someString)
    } else {
        withContext(Dispatchers.IO) {
            val name = // some background logic, where name may still be null
            name.orEmpty()
        }
    }
}

您将在onCreate

中这样称呼它
lifecycleScope.launch {
    val name = getDisplayableName(this)
}