android - 如何从自定义视图访问主机片段的生命周期范围?
问题描述
我需要在自定义视图中使用协程。看完这个演讲,我相信我最好的选择是使用生命周期范围作为协程范围,这样当生命周期所有者被销毁时它会自动取消。
但是,我似乎无法访问自定义视图中的生命周期范围。根据文档,我们既可以从生命周期对象访问它,也可以lifecycle.coroutineScope
从生命lifecycleOwner.lifecycleScope
周期对象访问它。但是自定义视图不是生命周期所有者。那么我可以以某种方式访问片段的生命周期范围吗?或者如果我不能,我应该使用哪个协程上下文?
解决方案
我通过实现LifecycleObserver接口解决了这个问题。在这个关于 Udacity的免费课程的第 4 课中很好地解释了如何使用 LifecycleObserver 接口制作生命周期感知组件。
我在片段和自定义视图中注册了片段的生命周期,在获得生命周期时,我使用生命周期来获取生命周期范围。
//Inside custom view
fun registerLifecycleOwner(lifecycle: Lifecycle){
lifecycle.addObserver(this)
scope = lifecycle.coroutineScope
}
//Inside fragment
binding.myCustomView.registerLifecycleOwner(lifecycle)
然后在自定义视图中,我像这样使用它:
scope.launch{
//Do work
}
推荐阅读
- c# - 基于组角色的授权
- javascript - Discord 机器人出现错误并且没有做它应该做的事情
- python - Python中嵌套列表的排列
- android - 在 RecyclerView 中,scrollToPosition 和 smoothScrollToPosition 有什么区别?
- javascript - setInterval 不更新整数
- webpack - 如何删除 webpack 4.44
- node.js - 使用 CodePipeline 在 GitHub 中跟踪更改名称的分支
- spring - Spring-Redis-Cache:如果我们在 azure 上重新启动 redis,需要一段时间才能重新连接
- acumatica - InventoryID 使用 SOAP 中断 Acumatica 账单创建
- javascript - 使用 .done 类切换购物清单项适用于一种功能,但不适用于另一种功能,为什么?