moh*_*eti 5 android kotlin android-viewbinding
我正在使用此链接中的AutoClearedValue 类,当视图被销毁时,支持字段变为空,这很好,但我有一个线程(实际上是一个 kotlin 协程),在它完成后,它访问该值(使用 autoCleared)但是如果在它的工作完成之前,我导航到另一个片段(这个片段的视图被破坏),然后它尝试访问该值,但由于它为空,我得到一个异常,因此崩溃。我该怎么办?
还需要将此 autoCleared 用于哪些变量?我将它用于 viewBinding 和 recyclerview 适配器。
你有2个选择:
1-取消其销毁后可能访问视图的所有正在运行的作业。重写onDestroyView()来执行此操作。
此外,您可以启动协程viewLifecycleOwner.lifecycleScope以在视图销毁时自行取消。
viewLifecycleOwner.lifecycleScope.launch {
// do sth with view
}
Run Code Online (Sandbox Code Playgroud)
2-(首选解决方案)在协程和视图之间使用生命周期感知组件(例如 LiveData):
协程推送实时数据中的状态或数据,您必须使用viewLifeCycleOwner范围观察它以更新视图。
private val stateLiveData = MutableLiveData<String>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
stateLiveData.observe(viewLifecycleOwner) { value ->
binding.textView.text = value
}
}
private fun fetchSomething() {
lifecycleScope.launch {
delay(10_000)
stateLiveData.value = "Hello"
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
151 次 |
| 最近记录: |