为了在android上使用mvp模式实现“干净”架构,建议将androID框架视为插件,而不是将任何知识产权感知依赖项泄漏到presenter层.使用rxjava,如果我有一个设计用于将数据“推送”到视图层的演示者,我可能希望有这样的逻辑:
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)}@OverrIDepublic voID unbind() { compositedisposable.dispose();}
但是,通过观察’AndroIDSchedulers.mainThread()’,这会强制依赖于:
import io.reactivex.androID.schedulers.AndroIDSchedulers
在这一点上,我的主持人现在知道androID并且与之相关;我想避免.
处理这个的建议方法是什么,以便保证在AndroID的UI(主)线程上将结果传递给VIEwLayer,而演示者不保持与androID相关的任何依赖?
解决方法:
AndroIDSchedulers.mainThread()使用AndroID代码在主线程上安排 *** 作,不要直接在演示者中使用它.
您可以重构演示者以在其构造函数中使用Scheduler,在生产代码中使用常规的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
以上是内存溢出为你收集整理的在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?全部内容,希望文章能够帮你解决在RxJava上使用Android上的干净MVP:如何在仍然观察UI线程的同时保持演示者没有任何Android知识?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)