【问题标题】:How to unsubscribe Single Observable in RxJava如何在 RxJava 中取消订阅单个 Observable
【发布时间】:2017-04-10 10:19:15
【问题描述】:

我希望在手术后取消订阅 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
}

}

【问题讨论】:

  • 可能与已回答的另一个问题重复 here

标签: android rx-android rx-java2


【解决方案1】:

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

Single 只会调用这些方法之一,并且只会调用它 一次。在调用任一方法时,Single 终止并且 订阅结束。

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

【讨论】:

    猜你喜欢
    • 2019-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多