RxJava:一個在JVM上使用可觀測的序列來組成異步的,基於事件的程序的庫。說白了就是異步
優勢:
使用:
先明白三個概念:
Observable被觀察者,Observer觀察者,Subscribe訂閱
上游Observable和下游observer通過subscribe建立連接,總共就3步:創建上游,創建下游,建立連接。
可以有個很簡便的鏈式寫法:
subscribe()有很多重載的方法,以下爲1~6:
public final Disposable subscribe() {}
public final Disposable subscribe(Consumer<? super T> onNext) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
public final void subscribe(Observer<? super T> observer) {}
1:無參數,下游不關心任何事件
2:只關心next事件
3,只關心next和error,其他同理。
線程調度:
儘可能使用內置schedeler,因爲在RxJava內部使用線程池來維護這些線程,效率較高。
Schedulers.io():io操作,用於網絡,讀寫文件等io密集型操作
Schedulers.computation():CPU計算密集型操作,用於需要大量計算的操作
Schedulers.newThread():新開線程
AndroidSchedulers.mainThread():代表Android主線程
網絡請求時,如果activity退出了,下游無法更新UI了怎麼辦?
RxJava中內置了一個容器CompositeDisposable,每次得到一個Disposable就調用add方法添加到容器中,所以當退出時,調用CompositeDisposable.clear()即可切斷所有水管。
參考:https://www.jianshu.com/u/c50b715ccaeb