如何解决如何从自定义视图访问主机片段的lifecycleScope?
我需要在自定义视图中使用协程。观看完talk之后,我相信我最好的选择是使用 lifecycleScope 作为协程范围,以便在销毁生命周期所有者时将其自动取消。
但是,我似乎无法在自定义视图中访问lifecycleScope。根据{{3}},我们可以从 lifecycle 对象以lifecycle.coroutineScope
或从 lifecycleOwner 以lifecycleOwner.lifecycleScope
对其进行访问。但是自定义视图不是生命周期所有者。那么我可以以某种方式访问该片段的lifecycleScope吗?或者,如果不能,应该使用哪个协程上下文呢?
解决方法
我通过实现LifecycleObserver接口解决了这个问题。 free course on Udacity的第4课对如何使用LifecycleObserver接口制作具有生命周期意识的组件进行了很好的解释。
我在片段内部和自定义视图中注册了片段的生命周期,在获得生命周期的同时,我使用了生命周期来掌握lifecycleScope。
//Inside custom view
fun registerLifecycleOwner(lifecycle: Lifecycle){
lifecycle.addObserver(this)
scope = lifecycle.coroutineScope
}
//Inside fragment
binding.myCustomView.registerLifecycleOwner(lifecycle)
然后在自定义视图中,我像这样使用它:
scope.launch{
//Do work
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。