首页 > 解决方案 > 如何从自定义视图访问主机片段的生命周期范围?

问题描述

我需要在自定义视图中使用协程。看完这个演讲,我相信我最好的选择是使用生命周期范围作为协程范围,这样当生命周期所有者被销毁时它会自动取消。

但是,我似乎无法访问自定义视图中的生命周期范围。根据文档,我们既可以从生命周期对象访问它,也可以lifecycle.coroutineScope生命lifecycleOwner.lifecycleScope周期对象访问它。但是自定义视图不是生命周期所有者。那么我可以以某种方式访问​​片段的生命周期范围吗?或者如果我不能,我应该使用哪个协程上下文?

标签: androidandroid-custom-viewkotlin-coroutinescoroutinescope

解决方案


我通过实现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
}

推荐阅读