1. 程式人生 > >Retrofit2+Rxjava2如何主動取消網路請求

Retrofit2+Rxjava2如何主動取消網路請求

近期在新專案中使用了Retrofit2+Rxjava2+Mvp的框架,在搭建的過程中想到一個問題,困擾了我兩天。Retrofit2+Rxjava2如何主動去取消網路請求。

在單獨使用Retrofit2中,我們可以通過呼叫Call的cancel();方法 主動去取消網路請求,但是當。Retrofit2+Rxjava2返回Observable 或者 Flowable 時我們如何主動去取消網路請求呢?

在剛學習Rxjava2時,我們都知道 通過呼叫 Disposable 的 dispose()方法能主動斷開 Observable和Observer之間的連線,但是能不能通過這個類去主動取消網路請求呢? 答案當然是 :可以的!!

來看看Retrofit2在搭配Rxjava2時的基本配置 這裡寫圖片描述

                                    Retrofit2+ Rxjava2

點開RxJava2CallAdapterFactory.create()我們看看原始碼:
這裡寫圖片描述

在get方法中會返回RxJava2CallAdapter,繼續點選原始碼:
這裡寫圖片描述
Observable/Flowable
沒錯,我們看到了我們熟悉的Observable和Flowable這就是Retrofit2+Rxjava2搭配所返回的Observable/Flowable 並綁定了Call類。我們看看這個Observable/Flowable到底和Call類幹了什麼勾當:點開同步執行的CallEnqueueObservable:

這裡寫圖片描述

發現在dispose方法裡已經呼叫了 call.cancle();

至此困擾了兩天的疑惑就此解開!!MMP