kotlin 回调转协程挂起函数

本文介绍了如何将Android SDK中的回调转换为Kotlin协程的挂起函数,特别是腾讯云IM的接口。讨论了suspendCancellableCoroutine的使用,以及如何处理实时数据更新的callbackFlow、SharedFlow和StateFlow。文章强调了callbackFlow的实验性状态,推荐在稳定后使用。
github博客

λ:

今天起 android demo 项目新加个sdk:腾讯云IM,最近正在用,而且接口多,涉及到的需求也挺全。正好练手。同时也有flutter的sdk。顺路把flutter也写了。

大多数sdk或者库在提供api时,对于异步处理一般都是提供回调。好处是通用,兼容,不管java, kotlin,不用管其他依赖库。 坏处就不用再提了。

IM也不例外是一堆回调,MVVM模式下,一层层传回调上去就很low,所以把IM用到的接口整理成Service,在里边把回调包成kotlin 协程挂起函数。

suspendCancellableCoroutine

public suspend inline fun <T> suspendCancellableCoroutine(crossinline block: (CancellableContinuation<T>) -> Unit): T 

public suspend inline fun <T> suspendCoroutine(crossinline block: (Continuation<T>) -> Unit): T

协程库提供的两个内联函数。通过操作其中的CancellableContinuation提交结果。点进去看源码,查看支持的操作。

public interface Continuation<in T> {
   
   
    public val context: CoroutineContext

    public fun resumeWith(result: Result<T>)
}

public interface CancellableContinuation<in T> : Continuation<T> {
   
   
    public val isActive: Boolean

    public val isCompleted: Boolean

    public val isCancelled: Boolean

    public fun cancel(cause: Throwable? = null): Boolean

    public fun invokeOnCancellation(handler: CompletionHandler)

    ... 试验性接口
}

public inline fun <T> Continuation<T>.resume(value: T): Unit = resumeWith(Result.success(value))

public inline fun <T> Continuation<T>.resumeWithException(exception: Throwable)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值