android - onPause 后的 Android LiveData Observer
问题描述
接下来的问题是,我订阅了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
推荐阅读
- java - 类编译但在运行时不可用:Robot() 显示 java.lang.reflect.InvocationTargetException
- javascript - glTF 文件没有显示任何内容
- apache-spark - 如何在不重复的情况下分组 - Apache Pig
- python - 使用 DistilBERT 生成文本句子
- asynchronous - 基于异步事件管理订阅
- arrays - 如何在一个 mongodb 集合中获取一个值并使用该值更新另一个集合订单和库存系统中的另一个文档
- c++ - GetDIBits 在屏幕捕获函数中多次迭代后返回零
- sql - 带分组依据的 SQL 语句 - 乘客列表
- android - 带有两个(或更多)图像的平滑滑块
- python - Pip 安装因“连接错误”ssl 问题而失败