如何从自定义视图访问宿主片段的生命周期范围?

Oya*_*nlı 1 android android-custom-view kotlin-coroutines coroutinescope

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

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

Oya*_*nlı 7

我通过实现LifecycleObserver接口解决了这个问题。Udacity 免费课程的第4 课很好地解释了如何使用 LifecycleObserver 接口制作生命周期感知组件。

我在片段内部和自定义视图内部注册了片段的生命周期,在获取生命周期的同时,我使用生命周期来获取生命周期范围。

//Inside custom view
fun registerLifecycleOwner(lifecycle: Lifecycle){
    lifecycle.addObserver(this)
    scope = lifecycle.coroutineScope
}

//Inside fragment
binding.myCustomView.registerLifecycleOwner(lifecycle)
Run Code Online (Sandbox Code Playgroud)

然后在自定义视图中,我像这样使用它:

scope.launch{ 
    //Do work
}
Run Code Online (Sandbox Code Playgroud)