Model view controller RxJava订阅未正确取消订阅
我有一个MVC应用程序,其中我必须用流的当前值更新视图。 在模型中,我有以下方法:Model view controller RxJava订阅未正确取消订阅,model-view-controller,rx-java,observable,Model View Controller,Rx Java,Observable,我有一个MVC应用程序,其中我必须用流的当前值更新视图。 在模型中,我有以下方法: public Observable<Integer> getStreamInstance(){ if(stream == null){ this.stream = Observable.create((Subscriber<? super Integer> subscriber) -> { new HeartbeatStream(fre
public Observable<Integer> getStreamInstance(){
if(stream == null){
this.stream = Observable.create((Subscriber<? super Integer> subscriber) -> {
new HeartbeatStream(frequence,subscriber).start();
});
}
return stream;
}
使用start方法,我只需使用当前值更新视图中的标签。
在我尝试通过取消订阅来停止更新之前,这一切都很正常;事实上,当我按下视图中的“停止”按钮时,标签将使用当前值不断更新,如果我再次按下“开始”,标签将显示来自两个不同流的值,第一个流是我第一次按下“开始”创建的,第二个流似乎是第二次按下“开始”创建的。
我错在哪里
编辑:
公共类HeartbeatStream扩展线程{
私人订户我猜你没有处理取消订阅
——尽管我看不出你的HeartbeatStream
课程中发生了什么
如果您正在使用Observable.create
创建一个Observable
,那么您需要使用subscriber.isUnsubscribed()
显式处理取消订阅
在可能的情况下,使用一些实用方法来创建一个可观察的-它们为您处理所有这些,例如Observable.just()
或Observable.from()
如果这没有帮助,请发布您的HeartbeatStream课程
有关更多详细信息,请参阅文档:
我想你没有处理取消订阅的问题,尽管我看不出你的HeartbeatStream
课程中发生了什么
如果您正在使用Observable.create
创建一个Observable
,那么您需要使用subscriber.isUnsubscribed()
显式处理取消订阅
在可能的情况下,使用一些实用方法来创建一个可观察的-它们为您处理所有这些,例如Observable.just()
或Observable.from()
如果这没有帮助,请发布您的HeartbeatStream课程
有关更多详细信息,请参阅文档:
我猜您试图定期向触发屏幕更新的某个事件发送信号。有一个操作员:
Observable<Long> timer = Observable.interval(period, TimeUnit.MILLISECONDS,
AndroidSchedulers.mainThread());
SerialSubscription serial = new SerialSubscription();
public void start() {
serial.set(timer.subscribe(v -> view.updateCurrValue(v)));
}
public void stop() {
serial.set(Subscriptions.unsubscribed());
}
public void onDestroy() {
serial.unsubscribe();
}
Observable timer=Observable.interval(周期,TimeUnit.ms,
AndroidSchedulers.mainThread());
SerialSubscription serial=新的SerialSubscription();
公开作废开始(){
serial.set(timer.subscribe(v->view.updateCurValue(v));
}
公共停车场(){
serial.set(Subscriptions.unsubscripted());
}
公共空间{
serial.unsubscribe();
}
我猜您试图定期向触发屏幕更新的事件发送信号。有一个操作员:
Observable<Long> timer = Observable.interval(period, TimeUnit.MILLISECONDS,
AndroidSchedulers.mainThread());
SerialSubscription serial = new SerialSubscription();
public void start() {
serial.set(timer.subscribe(v -> view.updateCurrValue(v)));
}
public void stop() {
serial.set(Subscriptions.unsubscribed());
}
public void onDestroy() {
serial.unsubscribe();
}
Observable timer=Observable.interval(周期,TimeUnit.ms,
AndroidSchedulers.mainThread());
SerialSubscription serial=新的SerialSubscription();
公开作废开始(){
serial.set(timer.subscribe(v->view.updateCurValue(v));
}
公共停车场(){
serial.set(Subscriptions.unsubscripted());
}
公共空间{
serial.unsubscribe();
}
设计可观察一旦发出所有项目并调用onComplete回调,取消订阅您的观察者
看看这个例子,一旦所有项目都发出并且调用了onComplete回调,就取消订阅您的观察者
看这个例子我添加了heartbeatStream类我添加了heartbeatStream类
Observable<Long> timer = Observable.interval(period, TimeUnit.MILLISECONDS,
AndroidSchedulers.mainThread());
SerialSubscription serial = new SerialSubscription();
public void start() {
serial.set(timer.subscribe(v -> view.updateCurrValue(v)));
}
public void stop() {
serial.set(Subscriptions.unsubscribed());
}
public void onDestroy() {
serial.unsubscribe();
}