[英]Android LiveData Observer after onPause
接下来的问题是,我订阅了活动中的LiveData
更改,并且第一次在观察者中获取所有数据,但是当我启动另一个活动然后返回到此活动时,观察者未被调用。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
viewModel = ViewModelProviders.of(this, viewModelFactory).get(MainMenuViewModel.class);
observeViewModel();
}
@Override
protected void onResume() {
super.onResume();
viewModel.loadUserEntry();
}
public void observeViewModel() {
viewModel.getUser().observe(this, userEntry -> {
// Do some code
});
}
这是我的ViewModel的代码
void loadUserEntry() {
disposable.add(userRepository.getUser()
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(user::setValue, Throwable::printStackTrace));
}
public LiveData<UserEntry> getUser() {
return user;
}
因此,我进行了测试并一直订阅,我拥有用户值,然后将此值设置为LiveData。
如果有人可以提供帮助,我将不胜感激。 谢谢。
看一看“观察LiveData对象” :
通常,LiveData 仅在数据更改时才将更新传递给活动的观察者。 此行为的一个例外是,当观察者从非活动状态更改为活动状态时,他们也会收到更新。 此外,如果观察者第二次从非活动状态更改为活动状态,则仅当值自上次变为活动状态以来已更改时,它才接收更新。
在您的情况下,只要活动处于后台,视图模型就一直存在。 它导致LiveData
保留UserEntry
实例,当您返回此活动并调用loadUserEntry()
它将加载相等(甚至相同)的UserEntry
实例。 加载的实例等于上一个实例-> LiveData
不重新LiveData
它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.