我有时必须在Observable中执行一些清理任务(例如关闭打开的文件),我想知道什么是最好的方法。 到目前为止,我已经看到了两个,但我很难理解它们有什么不同:你能解释一下这些差异吗?是否有更好的方法来实现这一点?RxJava Observable.doOnUnsubscribe()vs Subscriber.add()
1)
// MyObject will take care of calling onNext(), onError() and onCompleted()
// on the subscriber.
final MyObject o = new MyObject();
Observable obs = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
try {
if (!subscriber.isUnsubscribed()) {
o.setSubscriber(subscriber);
// This will tell MyObject to start allocating resources and do its job.
o.start();
}
} catch (Exception e) {
subscriber.onError(e);
}
}
}).doOnUnsubscribe(new Action0() {
@Override
public void call() {
// This will tell MyObject to finish its job and deallocate any resources.
o.stop();
}
});
2)
Observable obs = Observable.create(new Observable.OnSubscribe<Object>() {
@Override
public void call(Subscriber<? super Object> subscriber) {
try {
if (!subscriber.isUnsubscribed()) {
// MyObject will take care of calling onNext(), onError() and onCompleted()
// on the subscriber.
final MyObject o = new MyObject(subscriber);
subscriber.add(Subscriptions.create(new Action0() {
@Override
public void call() {
// This will tell MyObject to finish its job and deallocate any resources.
o.stop();
}
}));
// This will tell MyObject to start allocating resources and do its job.
o.start();
}
} catch (Exception e) {
subscriber.onError(e);
}
}
});
您已经使用'doOnSubscribe资源'在示例1中。它应该是问题标题中提到的'doOnUnsubscribe'。 –
@PraveerGupta谢谢我修复了错字! –