Rxjava
關(guān)鍵詞:異步數(shù)據(jù)流 背壓(控制流速) 觀察者模式
原理:創(chuàng)建一個
Observable
來完成異步任務(wù)泣棋,組合使用各種不同的鏈?zhǔn)讲僮髟で眩瑏韺崿F(xiàn)各種復(fù)雜的操作胎挎,最終將任務(wù)的執(zhí)行結(jié)果發(fā)射給Observer
進(jìn)行處理。-
用途:
- 簡化異步程序的流程
- 使用近似于Java8的流的操作進(jìn)行編程:因為想要在Android中使用Java8的流編程有諸多的限制,所以我們可以使用RxJava來實現(xiàn)這個目的燃乍。(鏈?zhǔn)讲僮鳎?/li>
-
依賴:
compile 'io.reactivex.rxjava2:rxjava:2.2.0' compile 'io.reactivex.rxjava2:rxandroid:2.0.2'
-
三部曲
- 初始化Observable
- 初始化Observer
- 建立訂閱關(guān)系
-
操作符
map:將一個 Observable 對象通過某種關(guān)系轉(zhuǎn)換為另一個Observable 對象
-
flatmap:
flatMap
操作符可以將一個發(fā)射數(shù)據(jù)的Observable
變換為多個Observables
,然后將它們發(fā)射的數(shù)據(jù)合并后放到一個單獨的Observable
一個數(shù)據(jù)(菜單列表)-----多個(菜的詳情)-----一個(所有菜的詳情的集合)
-
concat:concat 可以做到不交錯的發(fā)射兩個甚至多個 Observable 的發(fā)射事件,并且只有前一個 Observable 終止(onComplete) 后才會訂閱下一個 Observable
利用 concat 的必須調(diào)用 onComplete 后才能訂閱下一個 Observable 的特性图柏,我們就可以先讀取緩存數(shù)據(jù),倘若獲取到的緩存數(shù)據(jù)不是我們想要的任连,再調(diào)用 onComplete()以執(zhí)行獲取網(wǎng)絡(luò)數(shù)據(jù)的 Observable蚤吹,如果緩存數(shù)據(jù)能應(yīng)我們所需,則直接調(diào)用 onNext()随抠,防止過度的網(wǎng)絡(luò)請求裁着,浪費用戶的流量。
zip:操作符可以將多個
Observable
的數(shù)據(jù)結(jié)合為一個數(shù)據(jù)源再發(fā)射出去interval:輪訓(xùn)(間隔任務(wù))