簡體   English   中英

取消Observable(RxJava 1)的執行

[英]Cancel execuction of Observable (RxJava 1)

我用subscripiton創建了Observable:

private Subscription mSearchSubscription = null;

mSearchSubscription = Observable.fromCallable(() -> {
    many network requests
}).subscribe(doing sth);

當我的活動被破壞時,我將執行以下代碼:

 if (mSearchSubscription != null){
        mSearchSubscription.unsubscribe();
    }

根據在互聯網上找到的信息,此行應取消此塊中的所有代碼執行。 但這不是:(此塊內的所有網絡請求都包裝有帶觀察符的Observables,因此當一個請求完成時,下一個請求正在執行,依此類推。正如我在取消訂閱和活動被銷毀后注意到的那樣,Observable內部的代碼仍在執行。

有什么更好的方法可以阻止它嗎? 我在這個項目中使用RxJava1

更新:我有MVC體系結構,其中控制器已插入到Activity中。 通過覆蓋活動中的onDestroy,我在控制器中調用方法以取消訂閱。 這是完整的代碼。 fromCallable(()->)塊內的每個網絡請求都類似於此mWebService.getSth(body parameters).subscribe(doSth)(在接口中返回Observable)。 我不希望在內部可觀察的執行過程中停止運行,而是停止執行此代碼塊,就像返回一樣。 之所以進行打包,是因為許多請求需要一個接一個地執行,並在一切准備就緒后將結果返回給活動。

您尚未詳細說明如何以及為什么這樣做,因此我最好的猜測是使用create

Observable.create(emitter -> {
    CompositeSubscription resources = new CompositeSubscription();
    emitter.setSubscription(resources);

    if (resources.isUnsubscribed()) {
        return;
    }

    // add these if you want to cancel the inner sources
    // resources.add(

    mWebService.getFirst(/* params */).subscribe(/* postprocess */);

    // );

    if (resources.isUnsubscribed()) {
        return;
    }
    mWebService.getSecond(/* params */).subscribe(/* postprocess */);

    if (resources.isUnsubscribed()) {
        return;
    }

    mWebService.getThird(/* params */).subscribe(/* postprocess */);

    emitter.onNext(/* the result object*/
    emitter.onComplete();
}, Emitter.BackpressureMode.BUFFER)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(/* work with the data */);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM