【发布时间】:2017-02-20 20:45:05
【问题描述】:
因为我想以一个干净的基础开始我的新应用程序,所以我正在寻找一种在不同类之间共享信息的好方法。例如,我想订阅一个可由不同类使用/共享的接口。
接口/Observable方式示例:
class SingleTonHolder {
private static _instance = null; // and initalize it using a static method.
private List<MyListener> myListeners new ArrayList<>();
public SingleTonHolder getInstance(){ return _instance }
public void registerListener(MyListener listener) { myListeners.add(listener); }
public void removeListener(MyListener listener) { myListeners.remove(listener); }
public void doSomethingToTheListener(...) { for(MyListener l : myListeners) l.doSomethingToTheListener(..); }
}
ClassOne extends MyListener {
public void onCreate() {
SingleTonHolder.getInstance().registerListener(this);
}
public vond onDestroy() {
SingleTonHolder.getInstance().removeListener(this);
}
}
和另一个监听变化的类。
ClassTwo {
MyListener listener = null;
public void onCreate() {
listener = new MyListener( () => { .... });
SingleTonHolder.getInstance().registerListener(listener);
}
public vond onDestroy() {
SingleTonHolder.getInstance().removeListener(listener);
}
}
这确实有效,看起来像默认解决方案。每次另一个 Object 调用 SingleTonHolder.doSomethingToTheListener() 时,它都会通知所有已注册的侦听器进行更改。
由于我想尝试使用缺少文档的 RxJava2 和 RxAndroid2 的相同解决方案,因此我尝试了以下方法。
Class CallFactory{
public Obvservable<List<Data>> getDummyData() { return anDummyObservable; }
}
然后我创建了一个单例类,它具有修改/观察客户端订阅的功能。
public Observable<List<Data>> getData() {
return CallFactory.with(context)
.getDummyData(...)
.map(modifyList -> { /** do some processing **/return modifyList;
})
}
因为每次客户端订阅它都会“召回”它并且客户端保持连接直到调用 onCompleted() ,所以它不会作为例外工作。
我第一次尝试将信息分享给所有订阅的客户,我在我的 Singleton 类中创建了一个 PublishSubject。
private PublishSubject<List<Data>> sharedSubject = PublishSubject.create();
现在我让我的客户使用类似的方法订阅主题
public PublishSubject getSharedSubject() { return this.sharedSubject; }
如果我想发送一条应该被所有监听客户端接收的消息,那么我创建了类似的东西
public void setNewData(List<Data> data) {
sharedSubject.onNext(data);
}
我很确定这不是它应该的方式,但是 rxjava 是为提供这样的解决方案而设计的吗?如果我想共享与 onNext、onError、onComplete 不同的事件,我是否需要在 onNext 中包装一个接口?
这些代码未经测试,只是为了说明我是如何理解它的。任何帮助将不胜感激。
【问题讨论】:
标签: android listener observable rx-java2