Rx简介的Scheduling and Threading部分表示
只能由最终订阅者
调用SubscribeOn和ObserveOn
它还说在UI应用程序中,表示层(通常是最终订阅者)应该是调用这些方法的表示层。
我想知道这个建议是否可靠,因为我看到一些不方便的情况:
subscribeOn()
,方便地传递IO Scheduler或直接调度程序。subscribeOn()
UI调度程序,然后是observeOn()
其他调度程序,最后是observeOn()
UI调度程序。在这种情况下,只能在最终订阅者中调用subscribeOn()
和observeOn()
意味着只能在UI线程中处理流。为什么我应该牺牲我的应用程序的体系结构并忽略Rx通过仅由最终订阅者调用这两种方法来轻松切换线程的能力,这是否有充分的理由?
答案 0 :(得分:3)
表示层本身并不关心observable来自何处,但它确实关心它是否可能锁定UI线程。因此表示层必须采取预防措施以防止这种情况发生。这是一个幸福的无知与一层安全的情况。
表示层无关紧要。它只是想确保它本身没有被阻止。
如果流来自用户界面和,则需要花费很长时间才能处理,然后流的所有者应该认真对待这一点,并确保它在非UI调度程序上处理。然后UI必须确保它返回到UI线程,如果它需要在那里消费。如果处理速度很快则无关紧要。
答案 1 :(得分:3)
很高兴看到你读过这本书,并且花时间挑战那里的一些指导。
我给出这个指导的原因是因为
这些显然是我的观点,但我看到这些简单的指南有助于清理数十个项目的代码,减少代码库,提高测试能力,提高可预测性,并在很多情况下大幅提高性能。
遗憾的是,很难将这些项目的案例研究放在一起,因为大多数项目受到新发展区的保护。我希望看到它对您有用或如何应用替代模式。