gpt4 book ai didi

android - 在带有 RxJava : How can you keep the presenter free of any android knowledge while still observing on the UI thread? 的 Android 上使用整洁的 MVP

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:56:21 25 4
gpt4 key购买 nike

为了使用 mvp 模式在 android 上实现“整洁”的架构,建议将 android 框架视为插件,并且不要将任何 android 感知依赖项泄漏到演示层中。使用 rxjava,如果我有一个设计用于将数据“推送”到 View 层的演示器,我可能希望有这样的逻辑:

public interface SearchPresenter {

interface ViewLayer {
void updateResults(List<SearchResult> searchResults)
}
void bind(ViewLayer viewLayer);
void unbind();
}

public class SearchPresenterImpl implements SearchPresenter {

ViewLayer viewLayer;
CompositeDisposable compositeDisposable;

@Override
public void bind(ViewLayer viewLayer) {
this.viewLayer = viewLayer;

compositeDisposable = new CompositeDisposable();
compositeDisposable.add(
searchInteractor.getSearchResults()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::refreshView));

}

private void refreshView(List<SearchResult> searchResults) {
//send the results back to the view layer to update a RecyclerView
viewLayer.updateResults(searchResults)
}

@Override
public void unbind() {
compositeDisposable.dispose();
}

但是,通过观察“AndroidSchedulers.mainThread()”,这会强制依赖于:

import io.reactivex.android.schedulers.AndroidSchedulers

此时,我的演示者现在知道 android 并与之绑定(bind);我想避免这种情况。

处理此问题的建议方法是什么,以便保证将结果传递到 Android 的 UI(主)线程上的 ViewLayer,同时演示者不依赖于任何与 Android 相关的内容?

最佳答案

AndroidSchedulers.mainThread() 使用 Android 代码来安排主线程上的操作,不要直接在演示者中使用它。相反,您可以重构 Presenter 以在其构造函数中采用 Schedulers,在生产代码中使用常规 AndroidSchedulers.mainThread()Schedulers.io(),在测试中您可以发送 Schedulers.trampoline()Schedulers.immediate()

在这个例子中看到这个模式:https://github.com/riggaroo/GithubUsersSearchApp/blob/master/app/src/main/java/za/co/riggaroo/gus/presentation/search/UserSearchPresenter.java

及其测试类在这里: https://github.com/riggaroo/GithubUsersSearchApp/blob/8b83095d7a2cc8f3cb69a945224ab4c37cf54a37/app/src/test/java/za/co/riggaroo/gus/presentation/search/UserSearchPresenterTest.java

关于android - 在带有 RxJava : How can you keep the presenter free of any android knowledge while still observing on the UI thread? 的 Android 上使用整洁的 MVP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46570795/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com