【发布时间】:2018-05-12 08:43:44
【问题描述】:
在浏览大量讨论使用 RxJava 2 的 Android MVVM 架构的文章时(例如 this article),您经常会看到如下内容:
class LobbyViewModel extends ViewModel {
...
void loadCommonGreeting() {
loadGreeting(loadCommonGreetingUseCase.execute());
}
void loadLobbyGreeting() {
loadGreeting(loadLobbyGreetingUseCase.execute());
}
MutableLiveData<Response<String>> getResponse() {
return response;
}
MutableLiveData<Boolean> getLoadingStatus() {
return loadingStatus;
}
private void loadGreeting(Single<String> single) {
disposables.add(single
.subscribeOn(schedulersFacade.io())
.observeOn(schedulersFacade.ui())
.doOnSubscribe(s -> loadingStatus.setValue(true))
.doAfterTerminate(() -> loadingStatus.setValue(false))
.subscribe(
greeting -> response.setValue(Response.success(greeting)),
throwable -> response.setValue(Response.error(throwable))
)
);
}
当你看上面的逻辑时,你会看到每次用户触发一个动作,(loadCommonGreeting()/loadLobbyGreeting()) 一个新的disposable会被添加到CompositeDisposable变量disposables。
在这种情况下,这可能不是什么大问题,但我可以想象,在其他一些情况下,链接到 CompositeDisposables 的 Disposables 的数量可能会达到数千甚至更多。
这被认为是一种好的或安全的做法吗?
【问题讨论】:
-
RxJava 2 Extensions 项目最近添加了工具,可以自动从
CompositeDisposables 中删除已完成的消费者。
标签: android mvvm rx-java rx-java2