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