gpt4 book ai didi

android - 在 View 被销毁后从另一个线程访问 AutoClearedValue

转载 作者:行者123 更新时间:2023-12-03 22:28:58 25 4
gpt4 key购买 nike

我正在使用 this link 中的 AutoClearedValue 类当 View 被销毁时,支持字段变为空,这很好,但我有一个线程(实际上是一个 kotlin 协程),它完成后,它访问值(它使用 autoCleared)但如果在它完成之前我导航到另一个 fragment (该 fragment 的 View 被破坏),然后它尝试访问该值,但由于它为空,我得到一个异常,因此崩溃。
我该怎么办?
这个 autoCleared 还需要用于哪些变量?我将它用于 viewBinding 和 recyclerview 适配器。

最佳答案

您有 2 个选项:
1- 在销毁后取消所有可以访问查看的正在运行的作业。覆盖 onDestroyView()去做吧。
此外,您可以启动协程 viewLifecycleOwner.lifecycleScope在 View 销毁时自行取消。

viewLifecycleOwner.lifecycleScope.launch {
// do sth with view
}
2-(首选解决方案)在协程和 View 之间使用生命周期感知组件(例如 LiveData):
协程推送实时数据中的状态或数据,您必须使用 viewLifeCycleOwner 观察它范围来更新 View 。
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"
}
}

关于android - 在 View 被销毁后从另一个线程访问 AutoClearedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66183257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com