我正在将新的Mosby MVI库用于新的演示应用程序。在演示者中定义意图时,在附加视图时触发/发出意图时不一致。
例如:让我们在一个活动中定义非常简单的意图
public Observable<Boolean> intentLoadData(){
return Observable.just(true);
}
演示者将意图绑定如下:
@Override
protected void bindIntents() {
Observable<MailListViewState> loadData = intent(ExampleViewContract::intentLoadData).flatMap(interactor::loadData)
.observeOn(AndroidSchedulers.mainThread());
subscribeViewState(loadData, ExampleViewContract::render);
}
这个意图工作得很好。当导航到不同的活动(详细视图)并返回时,bindIntents()
称为重新创建意图。intentLoadData()
不会发出新项目,MviBasePresenter 将使用内部 BehaviorSubject 提供以前的 ViewState。
我的问题是:当我稍微调整意图(用于重新加载数据)时。当重新附加视图时,意图开始发出一个项目。
因此,让我们将意图更改为:
private PublishSubject<Boolean> mReloadDataSubject = PublishSubject.create();
private void reloadData(){
mReloadDataSubject.onNext(true);
}
public Observable<Boolean> intentLoadData(){
return mReloadDataSubject.startWith(true);
}
导航到新活动并返回时不。重新附加视图时,意图会发出一个新项目。在我的情况下,这会导致对后端的新 APU 调用以重新加载数据,而不是重用最后一个 ViewState。即使reloadData()
从未调用过,也会发生这种情况。
这种行为感觉非常不一致。在重新附加视图期间触发意图时,我如何才能感觉更有控制力?
更新: 对我来说更有趣的是,如何避免在重新附加时自动发出意图,而无需完成 Observable。随着 PublishSubject 的引入,活动将重新加载整个数据,即使只是在旋转时也是如此。