最適合使用RxJava處理的四種場景
下面我們開始介紹RxJava最適合使用的四種場景,代碼示例基於RxJava1
場景一: 單請求異步處理
由於在Android UI線程中不能做一些耗時操作,比如網絡請求,大文件保存等,所以在開發中經常會碰到異步處理的情況,我們最典型的使用場景是RxJava+Retrofit處理網絡請求
MyService myService = retrofit.create(MyService.class); |
為了使代碼看起來簡潔點,這邊還使用了lambda表達式,updateUI
和showError
需要在當前類中實現,比如:
public void updateUI(Data data){ |
場景二: 多異步請求連續調用
這種場景其實也很常見,我們做用戶頭像編輯的使用,一般就會有三個請求需要連續調用:
- 請求頭像上傳的地址
- 上傳頭像
- 更新用戶信息
在平時的代碼裏,我們需要一步步callback嵌套下來,代碼冗長太難看,而且不好維護,使用RxJava鏈式調用處理代碼邏輯就會非常清晰
MyService myService = retrofit.create(MyService.class); |
這裏的just發送的固定值1,沒有實際意義,只是我覺得這樣更信息
你也可以用Observable.create創建observable。
場景三: 多異步請求合並處理
有時候在項目中,我們會碰到組合多個請求的結果後,再更新UI的情況,比如我們項目中就有一個從多個請求地址獲取通知數據,然後在APP上再按時間順序組合後展示的需求,這時候我們就可以用RxJava的zip函數來處理了
MyService myService = retrofit.create(MyService.class); |
zip函數會等待兩個請求都完成後,調用我們的合並方法combiNotification,等合並處理後再回調subscribe中的方法。
場景四: 定時輪詢
RxJava還特別適合對定時輪詢任務的處理, 一種典型的例子就是APP提交了一個任務給後臺異步處理,假設後臺處理需要1-2分鐘左右,我們需要定時到後臺查詢進度,並更新到UI上, 傳統的做法是用Handler的postDelay方法,用RxJava實現的話就會非常簡潔
Subscription subscription = Observable.interval(2, TimeUnit.SECONDS) |
我們以定時2秒查詢一次,直到進度progress=100為止,自動終止輪詢。
以上各種RxJava方法都是異步耗時調用,考慮到Activity的退出時請求還沒有完成,我們需要在Activity的OnDestroy方法中取消RxJava調用
最適合使用RxJava處理的四種場景