解锁屏幕后的Android 9冻结ui

时间:2019-04-01 20:20:17

标签: android kotlin

我正在构建计时器应用程序,我有一个视图模型来处理计时器数据(用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可能是相同/相似的问题

1 个答案:

答案 0 :(得分:0)

我以前曾经历过。您需要在ur Fragment或Activity的onResume中快速显示和隐藏警报对话框。此操作将防止屏幕冻结。