removeObservers 后 LiveData 上的观察者仍然活跃
Observer on LiveData still active after removeObservers
我 select 使用 LiveData 来自数据库的信息,根据日期的时间跨度将其传递给我的 Activity(通过 DAO、存储库和视图模型)。当我更改时间跨度时,我想删除 LiveData 上的旧观察者并为新的时间跨度创建新的观察者。
private void addStepsObserver(Date[] timeSpan) {
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
if (integer == null) {
return;
}
Log.i(StepRepository.TAG, "onChanged for getSteps().observe called " + integer);
updateStepCounter(integer);
}
});
}
private void removeObservers() {
Date[] timeSpan = homeViewModel.getCurrentTimespan();
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).removeObservers(this);
Log.i(TAG, "remove Observers " + timeSpan[0] + " " + timeSpan[1]);
}
但是,在我调用 removeObservers()
然后 addStepsObservers(timespan)
之后,时间跨度是另一个时间戳,两个观察者都调用了方法 updateStepCounter()
,尽管旧方法不是不再活跃(我使用 .hasObservers()
和 .hasActiveObservers()
进行了检查)
有什么建议吗?
homeViewModel.getSteps()
- returns 每次调用一个新的 LiveData
?所以,这意味着你从另一个新创建的 LiveData
中删除了一个观察者。您必须保留对在 addStepsObserver
步骤中创建的 LiveData
对象的引用,并且在 removeObservers
步骤中您应该从中删除观察者。
我 select 使用 LiveData 来自数据库的信息,根据日期的时间跨度将其传递给我的 Activity(通过 DAO、存储库和视图模型)。当我更改时间跨度时,我想删除 LiveData 上的旧观察者并为新的时间跨度创建新的观察者。
private void addStepsObserver(Date[] timeSpan) {
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).observe(this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
if (integer == null) {
return;
}
Log.i(StepRepository.TAG, "onChanged for getSteps().observe called " + integer);
updateStepCounter(integer);
}
});
}
private void removeObservers() {
Date[] timeSpan = homeViewModel.getCurrentTimespan();
homeViewModel.getSteps(timeSpan[0], timeSpan[1]).removeObservers(this);
Log.i(TAG, "remove Observers " + timeSpan[0] + " " + timeSpan[1]);
}
但是,在我调用 removeObservers()
然后 addStepsObservers(timespan)
之后,时间跨度是另一个时间戳,两个观察者都调用了方法 updateStepCounter()
,尽管旧方法不是不再活跃(我使用 .hasObservers()
和 .hasActiveObservers()
进行了检查)
有什么建议吗?
homeViewModel.getSteps()
- returns 每次调用一个新的 LiveData
?所以,这意味着你从另一个新创建的 LiveData
中删除了一个观察者。您必须保留对在 addStepsObserver
步骤中创建的 LiveData
对象的引用,并且在 removeObservers
步骤中您应该从中删除观察者。