回调转 Coroutine 或者 Flow
回调转 Coroutine
Kotlin提供了非常易用的协程API,但是在开发过程中遇到第三方SDK通过Java暴露出来的接口全是通过回调处理数据的情况。接口使用流程大致是:
当多个操作/数据之间存在先后依赖关系时,就容易陷入回调地狱,写起来非常不舒服。
比如想在导航结束后,收集终点信息,存入数据库,使用回调的形式写:
以上还是高度简化后的代码,实际场景下流程更复杂,代码可读性很低,修改起来也很麻烦。那么有没有办法把一个回调操作封装成 suspend ,以同步方式来组织呢?
可以使用 suspendCancellableCoroutine 来做。例如上面的操作,可以转化为:
在我使用的 Kotlin 2.1.0 版本中, continuation.resume 的函数签名发生了一点变化:
需要传入一个 onCancellation 的回调,如果 resume 了一个需要关闭的 Resource ,可以用这个回调来处理。
回调转 Flow
例如:
可以转化为:

