Android Значение LiveData не отправляется из фона - PullRequest
1 голос
/ 01 апреля 2020

Читая найденную документацию LiveData здесь , я наткнулся на этот раздел:

Если жизненный цикл становится неактивным, он получает последние данные после повторной активации. Например, действие, которое было в фоновом режиме, получает последние данные сразу после того, как оно возвращается на передний план.

Когда я создаю пустой проект для проверки этого, я обнаруживаю, что последние данные не отправляются, когда исходящий из фона.

Пример кода из onCreate():

viewModel = ViewModelProvider(this).get(MyViewModel::class.java)

button.setOnClickListener {
    viewModel.buttonClicked()
}

viewModel.textLiveData.observe(this, Observer {
    textview.text = it
    Log.d("TEST", "new data = $it")
})

При переходе в фоновый режим и при возврате последние данные, которые содержатся в LiveData, отправляются снова в наблюдатель?

ОБНОВЛЕНИЕ:

Код ViewModel согласно запросу:

class MyViewModel : ViewModel() {

    val textLiveData = MutableLiveData<String>()

    fun buttonClicked() {
        textLiveData.value = "new text value"
    }
}

1 Ответ

1 голос
/ 02 апреля 2020

Итак, после долгих исследований я поделюсь своим ответом, используя два сценария ios, чтобы упростить gr asp

Сценарий 1:

  • Приложение находится на переднем плане
  • Observer получает последнее изменение данных из LiveData
  • Приложение переходит в фоновый режим
  • При возврате из фона LiveData будет НЕ отправляет значение, поскольку Observer уже используется / имеет последнее изменение.

Сценарий 2:

  • Приложение находится на переднем плане
  • Обозреватель получает последнее изменение данных с LiveData
  • Приложение переходит в фоновый режим.
  • Когда приложение находится в фоновом режиме, LiveData получает новое значение.
  • Поскольку приложение все еще находится в фоновом режиме, а Observer не находится в активном состоянии, LiveData пока не будет отправлять изменение значения.
  • При возврате на передний план и Observer - это снова в активном состоянии LiveData отправляет последнее значение, так как оно изменилось
...