Android LiveData 值未从后台调度

Tar*_*ury 3 android android-livedata

阅读此处LiveData找到的文档,我遇到了这一部分:

如果生命周期变为非活动状态,它将在再次变为活动状态时接收最新数据。例如,位于后台的 Activity 在返回前台后立即接收最新数据。

当我创建一个空白项目来测试它时,我发现来自后台的最新数据不会被发送。

示例代码来自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")
})
Run Code Online (Sandbox Code Playgroud)

当进入后台并返回时,是否应该将其LiveData持有的最新数据再次发送给观察者?

更新:

根据要求的 ViewModel 代码:

class MyViewModel : ViewModel() {

    val textLiveData = MutableLiveData<String>()

    fun buttonClicked() {
        textLiveData.value = "new text value"
    }
}
Run Code Online (Sandbox Code Playgroud)

Tar*_*ury 5

因此,经过大量调查后,我将使用两个场景来分享我的答案,以便更容易掌握

场景一:

  • 应用程序处于前台
  • Observer接收最新数据更改LiveData
  • 应用程序进入后台
  • 从后台返回时,LiveData不会调度该值,因为Observer已经消耗/具有最新的更改。

场景2:

  • 应用程序处于前台
  • 观察者收到最新的数据变化LiveData
  • 应用程序转到后台。
  • 当 App 处于后台时,LiveData 会收到一个新值。
  • 由于应用程序仍处于后台且不Observer处于活动状态,LiveData因此还不会调度值更改。
  • 当返回前台并Observer再次处于活动状态时,LiveData会分派自更改以来的最新值