我正在构建计时器应用程序,我有一个视图模型来处理计时器数据(用rxjava实现)并将其保存在livedata对象中,然后有一个片段订阅此livedata并在视图中显示。
因此,流程就是计时器正在viewmodel中的某个位置运行,而剩余的当前时间则通过livedata显示给视图。我正在测试计时器是否仍在运行,即使我旋转屏幕,锁定屏幕并返回等。
在Android 9上,如果我锁定屏幕然后返回到它,则ui冻结-视图中未显示来自计时器livedata的更新。我正在记录该片段确实正在接收这些计时器更新,但是由于某种原因它没有在视图中显示。我只能在Android 9上重现它。
片段代码:
class TomatoFragment : BaseFragment<FragmentTomatoBinding, TomatoFragmentViewModel>(), OnBackPressedCallback {
companion object {
fun newInstance() = TomatoFragment()
}
override val viewModelClass = TomatoFragmentViewModel::class.java
override val layoutId = R.layout.fragment_tomato
////// some stuff
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewModel.initTomato()
initObservers()
}
private fun initObservers() {
observe(viewModel.getViewData()) {
val newText = it.getMainActionText(extendedFabTomatoSession.context)
extendedFabTomatoSession.text = newText
Log.d("SRA4KA", "time left: ${it.getShownTimeFormatted(requireContext())}")
textTomatoTimeLeft.text = it.getShownTimeFormatted(requireContext())
}
// some other stuff
}
这看起来真的很奇怪,因为我确实记录了正在设置的文本,但屏幕上没有任何变化。我录制了一个视频:https://youtu.be/l9kUexJKyaY
更新 我搜索了Google问题跟踪器,发现https://issuetracker.google.com/issues/118178434可能是相同/相似的问题
答案 0 :(得分:0)
我以前曾经历过。您需要在ur Fragment或Activity的onResume中快速显示和隐藏警报对话框。此操作将防止屏幕冻结。