当前位置: 首页 > 知识库问答 >
问题:

在Android中用RxJava替换观察者模式

乌修筠
2023-03-14

我已经开始学习RxJava和RxAndroid。我想用RxJava替换我的观察者模式。observer模式类似于Android LocationManager类,该类具有register和unregister方法。“observable”类(不意味着rx.observable)在其自己的线程(HandlerThread)中工作,并拥有监听器及其处理程序对象的映射,每个监听器都在其线程中调用(通过处理程序)。我想这很清楚。所以问题是如何使用RxJava实现它?这有意义吗?我读过PublishSubject和Subscriber,但我不知道如何在其线程中运行我的Observable。我不想使用“subscribeOn”方法,因为订阅者不创建可观察的,而只订阅在自己的线程中接收通知。谢谢你的建议。

共有1个答案

奚高扬
2023-03-14

你的总体方法是好的。让我为你充实几个方面。

让我们假设您的可观察类负责一个随时间变化的值。之前,您需要注册一个观察者,当其值发生变化时,可观察对象会提醒每个观察者。假设您正在观察颜色变化。(警告:下面是未测试的代码。我使用了类似的代码将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()取消您的观察。

 类似资料:
  • 在RxJava的世界里,我们有四种角色: Observable Observer Subscriber Subjects Observables和Subjects是两个“生产”实体,Observers和Subscribers是两个“消费”实体。

  • 问题内容: 我使用侦听器作为回调来观察Android的异步操作,但是我认为用RxJava替换此侦听器可能很棒,我是使用此库的新手,但是我真的很喜欢它,并且我始终将其与Android项目一起使用。 这是我的重构代码: 一个简单的回调: 和“观察者”: 谢谢! 问题答案: 例如,您可以使用 Observable.fromCallable 来创建可观察数据。 然后使用您的数据 使用了rxjava 1.x

  • 问题内容: 我一直在阅读Observer模式,以保持UI处于最新状态,但仍然看不到它的用途。即使在我的特定对象中通知了我的MainActivity然后运行update();方法我仍然无法使用Pet对象来获取更新值,因为该对象是在Oncreate中创建的…而我只是无法创建新对象,因为那时变量会有所不同..这是我的实施,它似乎不起作用。 观察者/ MainActivity 可观察/宠物 问题答案: 首

  • 是否有一种设计模式可以形成一个“复合”观察者/可观察者? 我的意思是我有一个可观察的,它在某个变化时通知它的监听器。 每个监听器也是一个可观察的,并通知它自己的监听器(在某个动作上,它做了哪个动作是由第一个可观察的通知触发的)。 这种观察者/可观察的“链接”作为设计是可以的,还是有一个标准的模式?

  • 主要内容:介绍,实现,Subject.java,Observer.java,BinaryObserver.java,OctalObserver.java,HexaObserver.java,ObserverPatternDemo.java当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知

  • 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 介绍 意图:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。 何时使用:一个对象(目标对象)