android– 处理Kotlin Coroutines生产商内部的取消

android– 处理Kotlin Coroutines生产商内部的取消,第1张

概述是否有可能在生产者构建器本身内处理生产者取消?取消订阅回调可能很有用:privatefunchanges(key:String)=produce<Unit>(UI,CONFLATED){vallistener=OnSharedPreferenceChangeListener{_,changedKey->if(key==changedKey)offer(Unit)

是否有可能在生产者构建器本身内处理生产者取消?取消订阅回调可能很有用:

private fun changes(key: String) = produce<Unit>(UI, CONFLATED) {        val Listener = OnSharedPreferencechangelistener { _, changedKey ->             if (key == changedKey) offer(Unit)        }        prefs.registerOnSharedPreferencechangelistener(Listener)        ???.onCancel {                  prefs.unregisterOnSharedPreferencechangelistener(Listener)        }}

或者可能存在实现这种情况的另一种方式?

解决方法:

首先,您不应该使用产品构建器以这种方式使API与侦听器一致,因为在产生构建器主体存在时,通道立即关闭并且将停止服务其功能.相反,您应该只创建一个Channel()并创建相应的连接.

不幸的是,频道目前不提供安装取消听众的开箱即用方式(见issue #341).在通道关闭时立即获得通知的唯一方法是扩展相应的通道类,这将导致以下代码:

private fun changes(key: String): ReceiveChannel<Unit> = object : ConflatedChannel<Unit>() {    val Listener = OnSharedPreferencechangelistener { _, changedKey ->        if (key == changedKey) offer(Unit)    }    init {        prefs.registerOnSharedPreferencechangelistener(Listener)    }    overrIDe fun afterClose(cause: Throwable?) {        prefs.unregisterOnSharedPreferencechangelistener(Listener)    }}
总结

以上是内存溢出为你收集整理的android – 处理Kotlin Coroutines生产商内部的取消全部内容,希望文章能够帮你解决android – 处理Kotlin Coroutines生产商内部的取消所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1104691.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存