RxJava——響應式編程

什么是Rx

  • ReactiveX是Reactive Extensions的縮寫。
  • Rx是一個編程模型,目標是提供一致的編程接口,幫助開發(fā)者更方便的處理異步數(shù)據(jù)流。目前Rx支持大部分流行的編程語言, 比如Java、C#、PHP等。
    -Rx是一個函數(shù)庫,讓開發(fā)者可以利用可觀察序列和LINQ風格查詢操作符來編寫異步和基于事件的程序。
    -可以這樣定義:Rx = Observables + LINQ + Schedulers。
  • ReactiveX不僅僅是編程接口,更是一種編程思想的突破。Rx還影響了其它程序庫、框架以及編程語言。

Rx模式——觀察者模式

-創(chuàng)建:Rx可以方便的創(chuàng)建事件流和數(shù)據(jù)流;
-組合:Rx使用查詢式的操作符組合和變換數(shù)據(jù)流;
-監(jiān)聽:Rx可以訂閱任何可以觀察的數(shù)據(jù)流并執(zhí)行操作。

Rx優(yōu)點——簡潔

-函數(shù)式風格:Rx可以方便的創(chuàng)建事件流和數(shù)據(jù)流;
-簡化代碼:Rx的操作符可以將復雜的邏輯簡化為很少的幾行代碼;
-異步錯誤處理機制:傳統(tǒng)的try/catch沒辦法處理異步計算,Rx提供了合適的錯誤處理機制;
-輕松使用并發(fā):Rx的Observables和Schedulers讓開發(fā)者可以避免底層線程同步和各種并發(fā)問題。

什么是RxJava

RxJava是[ReactiveX](http://reactivex.io/)在JVM上的一個實現(xiàn),也就是說RxJava就是一種用Java語言實現(xiàn)的響應式編程,來創(chuàng)建  基于事件的異步程序。

提升開發(fā)效率,降低維護成本一直是開發(fā)團隊永恒不變的宗旨。近一年來國內(nèi)的技術圈子中越來越多的開始提及RxJava,學習和掌握RxJava已經(jīng)很有必要。RxJava能幫助我們簡化代碼邏輯,提升代碼可讀性。這對于提升開發(fā)效率、降低后期維護成本很有幫助。
RxJava正在Android開發(fā)者中變的也越來越流行。唯一的問題就是上手不容易,尤其是大部分人之前都是使用命令式編程語言。但是一旦你弄明白了,你就會發(fā)現(xiàn)RxJava真是太棒了。
本系列幫助你了解RxJava,希望你學完之后能夠了解RxJava背后的思想(熟練掌握還需要多使用多實踐),并且喜歡RxJava。

學習RxJava

響應式編程的主要組成部分是Observable、 operator和subscriber。一般響應式編程的信息流如下所示:
Observable-> Operator 01 -> Operator 02->Operator03 ->Subscriber
Observable是事件的生產(chǎn)者,Subscriber是事件最終的消費者。
因為Subscriber通常在主線程中執(zhí)行,因此設計上要求代碼盡可能簡單,只對事件作出響應(不對事件和數(shù)據(jù)進行修改),而修 改事件的工作全部由 operator執(zhí)行。
Observable observable = Observable.create(newObservable.OnSubscribe() {
      @Override
      public voidcall(Subscriber subscriber) {
      subscriber.onNext("hello word");
      subscriber.onCompleted();
  }
});
Observer observer =newObserver() {
      @Override
      public voidonCompleted() {
      System.out.println("onCompleted");
}
      @Override
      public voidonError(Throwable e) {
      System.out.println("onError");
}
      @Override
      public voidonNext(String s) {
      System.out.println("onNext=  "+ s);
}
};
 observable.subscribe(observer);

上面提到修改事件在operator中執(zhí)行(下面代碼)

observable.map(new Func1<String, String>() {
           @Override
           public String call(String s) {
               return s+"  add content";
           }
       }).subscribe(observer);
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容