我有一个基于MVP +交互器+存储库的Android应用。使用响应流(RxJava 2)连接从存储库到演示者的所有层。视图向演示者请求一些内容,演示者向交互者询问,交互者从存储库询问,而存储库从API本身询问。响应通过与API到演示者的响应流相同的层。每层都可以为基础层映射数据。
问题是。我应该在哪里调用subscribeOn(io()/ computation()/ etc)和observeOn(AndroidSchedulers.mainThread())? 我认为应该从演示者中调用observeOn(AndroidSchedulers.mainThread()),因为可以在交互器中执行大量计算。 在许多示例中,演示者都调用了subscribeOn(io()/ computation()/ etc),但我不同意这种方法。我认为主持人不应该决定在哪个线程中加载数据。存储库应决定从哪个线程加载API中的数据。 例如,如果我们具有存储库接口来加载联系人。实现可以从数据库,Internet或内存中获取数据。无需为内存库创建线程。因此,存储库应确定是否订阅io / computation / etc调度程序。
有什么想法吗?
答案 0 :(得分:2)
由于以下原因,我不会在存储库层中调用subscribeOn()
和observeOn()
:
我通常在视图之前的最后一层调用subscribeOn()
和observeOn()
-在这种情况下,这将是您的演示者层。在这里,我可以完全控制交互器的组成,并且可以更好地判断我要在哪里处理事物以及在哪里需要处理结果。