作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 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):
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/
我在 android 中使用 AutoclearedValue,在运行 Android 4.4.4 的旧平板电脑中,我总是遇到这样的异常:当 AutoclearedValue 类可能无法使用 auto
我正在使用 this link 中的 AutoClearedValue 类当 View 被销毁时,支持字段变为空,这很好,但我有一个线程(实际上是一个 kotlin 协程),它完成后,它访问值(它使用
我是一名优秀的程序员,十分优秀!