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 步骤中您应该从中删除观察者。