Intro to Rx的调度和线程部分说
SubscribeOn 和 ObserveOn 的使用只能由最终订阅者调用
它还说,在 UI 应用程序中,通常是最终订阅者的表示层应该是调用这些方法的那个。
我想知道这个建议是否可靠,因为我看到了一些不方便的情况:
- 对于初学者,我不认为表示层应该决定订阅来自数据层的 Observable 的位置。在我看来,表示层应该不知道数据是来自数据库、来自 REST API 还是来自内存。出于这个原因,数据层
subscribeOn()
在返回 Observable 之前调用会很方便,传递 IO 调度器或直接调度器一样方便。 - 如果表示层从某个服务或用例(反过来从数据层获得)获取 Observable,并且该服务决定它需要在某个计算调度程序中处理流,那么表示层为什么要关心这个呢?
- 最初来自 UI 的流呢,所以它需要在 UI 线程中订阅。然后它会被发送到一些服务做一些工作,最后回到表示层在 UI 线程中被观察。这将要求 UI 流成为
subscribeOn()
UI 调度程序,然后是observeOn()
其他一些调度程序,最后observeOn()
是 UI 调度程序。subscribeOn()
在这种情况下,只能在最终订阅者中调用observeOn()
意味着流只能在 UI 线程中处理。
为什么我应该牺牲我的应用程序的架构并忽略 Rx 通过仅由最终订阅者调用这两种方法来轻松切换线程的能力有什么好的理由?