繁体   English   中英

onPause之后的Android LiveData Observer

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM