在Android

时间:2016-11-01 20:30:57

标签: android multithreading rx-java observer-pattern rx-android

我已经开始学习RxJava和RxAndroid了。我想用RxJava替换我的观察者模式。观察者模式类似于具有注册和取消注册方法的Android LocationManager类。 “observable”类(不代表rx.Observable)在其自己的线程(HandlerThread)中工作,并拥有侦听器及其Handler对象的映射,并且每个侦听器都在其线程中调用(通过Handler)。我觉得很清楚。那么问题是如何使用RxJava实现它?是否有意义?我已阅读有关PublishSubject和Subscriber但我不知道如何在其线程中运行我的Observable。我不想使用“subscribeOn”方法,因为Subscriber不会创建Observable,而只是订阅在自己的线程中接收通知。感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

您的一般方法很好。让我为你充实一些方面。

假设您的可观察类负责随时间变化的值。以前,您将注册一个观察者,并且可观察对象会在其值发生变化时向每个观察者发出警报。我们假设您正在观看颜色变化。 (警告:未经测试的代码如下。我使用类似的代码将Observer模式调整为RxJava。)

PublishSubject<Color> ps1 = new PublishSubject<>(); // your observable class
Observable<Color> observable = ps1.observeOn(Schedulers.newThread());
...
// handler in another thread
Subscription sub = observable.subscribeOn(myThreadScheduler).subscribe(myHandler);

现在,您的处理程序将在myThreadScheduler指定的线程上调用。您也可以sub.unsubscribe()取消观察结果。