android - 暂停执行,直到通过 LiveData 设置对象值
问题描述
我正在使用第三方 SDK,它具有我需要观察的 LiveData 对象以设置我的自定义对象的值:
fun setValueAndDoSomething(activity: FragmentActivity) {
var myCustomObject: MyCustomObject? = null
sdkComponent.observe(activity, Observer { sdkResult ->
myCustomObject = MyCustomObject(sdkResult)
})
// Wait until myCustomObject is not null
myCustomObject.doSomething()
}
我想等到 SDK LiveData 的回调被触发,以便 myCustomObject 不为空,才能继续执行其余的操作。如何使用 Kotlin Coroutines 实现这一目标?
解决方案
如果你想等待结果,你的函数必须是可挂起的。用于suspendCoroutine
获取延续并从回调中恢复:
suspend fun setValueAndDoSomething(activity: FragmentActivity) {
val myCustomObject = suspendCoroutine<MyCustomObject> { cont ->
sdkComponent.observe(activity, Observer { sdkResult ->
cont.resume(MyCustomObject(sdkResult))
})
}
myCustomObject.doSomething()
}
为了能够调用它,您必须launch
使用协程。
推荐阅读
- amazon-ecs - 大三角帆 ecs 帐户不会选择
- javascript - 为什么带有 some 方法的三元运算符会使该语句为假?
- node.js - 如何在 Telegraf 的内联键盘中单击按钮时传递变量?
- r - R中数据框列表中每一列的组合
- c# - NLog、UWP - 将日志写入 System.Diagnostic.Debug
- javascript - 使用多个复选框取消隐藏 div
- google-colaboratory - 可以将 google colab 笔记本名称分配给 python 变量。在 Jupyter 中,您可以使用 javascript,但这在 colab 中不起作用
- r - 如何从 2 个不同长度的数据框中显示双 y 轴的图例?
- python - 如何创建索引和列都是同一 df 列的唯一值的数据透视表?
- gnome-shell - 从另一个 gnome 扩展调用函数