Я использую Live Data для публикации состояний из модели представления в фрагменты, это может привести к частой публикации состояний. Но Mutable Live Data пропускает начальные значения и принимает последние доступные значения.
Существует статья , в которой говорится об этой характеристике, но есть ли способ обработки этого случая, такой как Текучий в RxJava или настройка Обратное давлениеСтратегия или мне нужно вернуться к использованию RxJava и управлять публикацией на основе жизненного цикла?
Ниже приведен пример кода, демонстрирующий это поведение. Значения от 1 до 10 публикуются, но принимаются только два значения, 0 и 10. Можем ли мы изменить это поведение в реальных данных или мне следует использовать RxJava для этой цели?
Фрагмент (подписчик):
class ParentFragment : Fragment() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(
this, ParentViewModelFactory(this, null)
).get(ParentViewModel::class.java)
viewModel.fastLiveData.observe(this, Observer {
Timber.i(it.toString())
})
viewModel.startPublishing()
}
}
Просмотр модели (издателя):
class ParentViewModel(private val savedState : SavedStateHandle)
: ViewModel<ParentState>() {
val fastLiveData : MutableLiveData<Int> = MutableLiveData(0)
fun startPublishing() {
for(x in 1..10) {
Timber.i(x.toString())
fastLiveData.postValue(x)
}
}
}
Вывод:
(ParentViewModel.kt:30)#startPublishing: 1
(ParentViewModel.kt:30)#startPublishing: 2
(ParentViewModel.kt:30)#startPublishing: 3
(ParentViewModel.kt:30)#startPublishing: 4
(ParentViewModel.kt:30)#startPublishing: 5
(ParentViewModel.kt:30)#startPublishing: 6
(ParentViewModel.kt:30)#startPublishing: 7
(ParentViewModel.kt:30)#startPublishing: 8
(ParentViewModel.kt:30)#startPublishing: 9
(ParentViewModel.kt:30)#startPublishing: 10
(ParentFragment.kt:57)#onChanged: 0
(ParentFragment.kt:57)#onChanged: 10