是否有可能在生产者构建器本身内处理生产者取消?取消订阅回调可能很有用:
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生产商内部的取消所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)