Intro to Rx中的调度和线程一节指出:
使用SubscribeOn和ObserveOn应该只由最终订阅者调用。
它还指出,在UI应用程序中,通常是最终订阅者的表示层应该调用这些方法。
我想知道这个建议是否可靠,因为我在一些情况下发现这不太方便:
首先,我认为展示层不应该决定数据层产生的Observable在哪里被订阅。在我看来,展示层应该不知道数据是来自数据库、REST API还是内存。因此,方便起见,数据层在返回Observable之前调用subscribeOn()
,传递IO Scheduler或立即Scheduler作为方便。如果展示层从某个服务或用例(反过来从数据层获取)获取Observable,并且该服务决定需要在某些计算Scheduler中处理流,那么为什么展示层要关心这一点呢?
那么一个最初来自UI的流怎么办,所以它需要在UI线程中订阅。然后它将被发送到某个服务去做一些工作,最后回到展示层在UI线程中观察。这将需要UI流
subscribeOn()
UI Scheduler,然后observeOn()
其他Scheduler,最后observeOn()
UI Scheduler。在这种情况下,能够只在最终订阅者中调用subscribeOn()
和observeOn()
意味着该流只能在UI线程中处理。
有没有什么好的理由让我牺牲我的应用程序架构,忽略Rx通过仅通过最终订阅者调用这两个方法轻松切换线程的能力?