我有一个viewmodel,它在与UI线程分开的线程上触发各种对象的可观察对象。同时,还有订阅这些observable的视图代码,需要更新UI线程上的控件。
使用ObserveOn
来确保OnNxt处理程序在UI线程上运行(即将ObserveOn
添加到可以在另一个线程上触发的任何位置),或者使用viewmodel代码负责在UI线程上调用/调度(即不需要ObserveOn
,但有一次丑陋调用/调度lambda需要),或者是哪个选项和另一个一样好?
答案 0 :(得分:4)
在这里查看我的答案:ObserveOn and SubscribeOn - where the work is being done。
了解了这一点后,具体答案应该清楚,并且将取决于您的Rx查询的确切工作方式。
一般情况下,您希望最大限度地减少在UI线程上完成的工作,因此请在订阅后尽快离开UI线程(必要时使用SubscribeOn
),然后尽快返回UI线程可以使用ObserveOn
。您通常会将这些应用于链中的最后一个运算符。
答案 1 :(得分:3)
我认为最好使用ObserveOn
或其他一些Rx调度机制来运行UI线程上的工作,因为那时你的解决方案仍然只是Rx代码并且仍然是可组合的。如果您使用Rx作为逻辑,但是然后使用其他一些非Rx调度机制来运行UI线程上的最后一位,那么当您切换机制时,您的代码可能会更加混乱,并且组合性较差。坚持ObserveOn
可以使事情变得更简单。