RxJava是使用Java實現的響應式編程庫,RxJava即 Reactive Extensions Java。目前有兩個版本RxJava1和RxJava2,推薦使用RxJava2,RxJava1已經中止支持了html
ReactiveX即Reactive Extensions,它經過可觀測的序列,實現了組合異步和事件驅動.它是一種編程方式。ReactiveX主要的實現方式是擴展 觀察者模式 來達到本身的目的。ReactiveX更多介紹戳官網java
瞭解什麼是Observer什麼是Observable? 英文原文 或者 掘金翻譯react
Observer是觀察者,Observable代表是能夠被觀察的。行人過紅綠燈,行人是Observer,紅綠燈的變化是能夠Observable的android
實際項目中但願數據一發生變化就通知須要知道這個變化的對象,這能夠經過觀察者模式實現,數據變化觀察者立馬就能夠對變化作出"響應"github
RxJava的一些API介紹 英文原文緩存
建立Observable的基本方式,能夠先了解最簡單的just操做,just的源碼分析戳這裏bash
瞭解什麼是Hot Observable,什麼是 Cold Observable,以及如何將Cold轉換成Hot 英文原文
- cold:每次訂閱和其它任何訂閱它的取到的數據都是同樣的
- hot:只能獲取從訂閱那一刻開始的數據,後續訂閱的不能獲取以前已經產生的數據
Observer的方法介紹 英文原文
onNext : 每次想通知 Observer 數據變化的時候,Observer的onNext方法就會被調用
便是Observable又是Observer的對象 英文原文
至關於本身產生數據本身再消費
- PublishSubject獲取訂閱時候的數據
- BehaviourSubject能夠獲取訂閱以前的1個數據
- ReplaySubject能獲取訂閱前已經產生的全部數據
- AsyncSubject只獲取最後一個數據
User user = new User();
user.setAge(1);
Observable.just(user).subscribe(new Action1<User>() {
@Override
public void call(User user) {
LOG.info("justVerify just user age:{}", user.getAge());
}
});
複製代碼
產生Observable的數據
RxJava操做符
既是Observable又是Observer案例
異步與阻塞案例
Observable.just(1).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
LOG.info("accept:{}", integer);
}
});
複製代碼
產生Observable的數據 能夠與 產生Observable的數據 對比下區別,大體就能夠轉換出過來了。
背壓:若是生產太快,消費不過來該怎麼辦?能夠反過來限制生產的速度,好比把全部生產的數據都緩存起來,消費者本身來取,好比只有有請求的時候纔給數據,沒有請求的數據所有扔掉