Я создаю приложение таймера, у меня есть viewmodel, который обрабатывает данные таймера (реализованные с помощью rxjava) и хранит их в объекте livingata, затем есть фрагмент, который подписывается на эти liveata и показывает их в виде.
Таким образом, поток работает так, что таймер работает где-то в viewmodel, и текущее оставшееся время выставляется на просмотр посредством liveata. Я проверяю, что таймер все еще работает, даже если я поворачиваю экран, блокирую экран и возвращаюсь и так далее.
В Android 9, если я заблокирую экран и затем вернусь к нему, пользовательский интерфейс будет заморожен - обновления из данных таймера не отображаются в представлениях. Я регистрирую, что фрагмент действительно получает эти обновления таймера, но по некоторым причинам он не отображается в представлениях. Я смог воспроизвести его только на 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
UPDATE
Я искал трекер проблем Google и обнаружил https://issuetracker.google.com/issues/118178434, что может быть такой же / похожей проблемой