android - 如何取消订阅 RxJava 中的单个 Observable

标签 android rx-android rx-java2

我希望在手术后取消订阅 Rx Singles。 这就是我在 RxJava 中取消订阅 Observable 的方式。

public class BooksRepositoryImpl implements IBooksRepository {


    private ReplaySubject<Book> bookSubject;
    private Subscription bookSubscription;

    BooksApi BooksApi;
    ISchedulerProvider scheduler;

    @Inject
    public BooksRepositoryImpl(BooksApi BooksApi, ISchedulerProvider scheduler) {
        this.BooksApi = BooksApi;
        this.scheduler = scheduler;
    }

    @Override
    public Observable<Book> getBooks(String author) {

        if (bookSubscription == null || bookSubscription.isUnsubscribed()) {
            bookSubscription = ReplaySubject.create();

            bookSubscription = BooksApi.getBooks(author)
                    .subscribeOn(scheduler.backgroundThread());
        }

        return bookSubscription.asObservable();


    }


    @Override
    public void unbind() {

        if (bookSubscription != null && !bookSubscription.isUnsubscribed())
            bookSubscription.unsubscribe();

    }

}

但我不确定如何取消订阅 Single Observable。 如果有人能够分享一些想法,那就太好了。

public class BooksRepositoryImpl implements IBooksRepository {

BooksApi BooksApi;
ISchedulerProvider scheduler;

@Inject
public BooksRepositoryImpl(BooksApi BooksApi, ISchedulerProvider scheduler) {
    this.BooksApi = BooksApi;
    this.scheduler = scheduler;
}

@Override
public Single<Book> getBooks(String author) {

    return BooksApi.getBooks(author)
            .subscribeOn(scheduler.backgroundThread());

}


@Override
public void unbind() {
    //?? HOW Can I unsubscribe here
}

最佳答案

根据文档Single ,您什么都不应该做,订阅会自行结束:

A Single will call only one of these methods, and will only call it once. Upon calling either method, the Single terminates and the subscription to it ends.

希望这对您有所帮助。 对不起我的英语。

关于android - 如何取消订阅 RxJava 中的单个 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43320607/

相关文章:

android - OSMDroid:当用户点击 map 时添加标记

android - 谷歌地图 Android API v2 : GooglePlayServicesNotAvailableException not thrown anymore

java - 如果 RxJava 中结果无效,如何发送 onError

rx-java - 为什么 rxjava Observable.subscribe(observer) 返回 void?

kotlin - 如何测试Completable Emitter.tryOnError()

java - RxJava 2,DisposableSubscriber 释放时未调用 Flowable.doOnCancel

java - 在 RxJava2 中正确使用 Single 和控制流

java - Android 手机可以暂停 wifi 扫描请求吗?

android - 小部件调整大小后小部件布局更改

java - RxJava : Consume result of Observable on another thread