RxJavaの基礎知識

5581 ワード

前言:これまでRxJavaを聞いたことがありますが、使ったことも理解したこともないので、この比較的流行している前言の枠組みを全面的に理解して勉強するつもりです.本編は主にRxJavaの基礎知識を説明し、apiの使用を記録し、後で調べるのが便利です.
解釈:RxJavaはイベントフローに基づいて非同期操作を実現するライブラリである.
特徴:RxJavaの使用方式は:イベントフローに基づくチェーン呼び出しであるため、RxJava:論理が簡潔で、優雅で、使用が簡単である.さらに重要なのは、プログラムロジックの複雑さが高まるにつれて、簡潔さと優雅さを維持することができます.
原理紹介:
ロール#ロール#
さぎょう
コントラスト
被観察者(Observable)
事件の発生源
客が事件を起こしたら食事をしたり、料理を注文したりします.
オブザーバー(Observer)
受信イベント処理
キッチンでお客様の注文を受け付けております
サブスクリプション(Subscribe)
被観察者と観察者をつなぐ橋
ウェイターが客の注文した料理を台所に渡す
イベント(Event)
被観察者と観察者の間の媒介
料理
すなわち、RxJavaの原理は、被観察者(Observable)がサブスクリプション(Subscribe)を介して被観察者(Observer)に順番にイベントを送信し、観察者(Observer)が順番にイベントを受信&対応する応答動を行うことにまとめられる
1.まず、観察者&生産イベントをどのように作成するか、最も簡単な実装:
//     Observable      e.onNext(1);e.onNext(2);e.onNext(3);     1,2,3

Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                e.onNext(1);
                e.onNext(2);
                e.onNext(3);
            }
        })
        
 //            ,              api              
 //    
 Observable.mergeArray(
                Observable.intervalRange(0,3,1,1,TimeUnit.SECONDS),
                Observable.intervalRange(3,3,1,1,TimeUnit.SECONDS),
                Observable.intervalRange(6,3,1,1,TimeUnit.SECONDS),
                Observable.intervalRange(6,3,1,1,TimeUnit.SECONDS)).subscribe(new Consumer() {
            @Override
            public void accept(Long aLong) throws Exception {
                Log.d(TAG, "      "+ aLong);
            }
        })
//just(T...):               
Observable.just(1,2,3,4).reduce(new BiFunction() {
            @Override
            public Integer apply(Integer integer, Integer integer2) throws Exception {
                Log.e(TAG, "        : "+integer2 +"    "+ integer);
                return integer*integer2;
            }
        })        
        

2.応答イベントを受け入れるオブザーバー(observer)を作成します.具体的にはapiもたくさんあります.
//   :    new observer     ,
new Observer() {
            //     observer      ,       
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG,"onSubscribe   : "+Thread.currentThread().getName());
            }
              //           onNext   ,       ,    
            @Override
            public void onNext(String s) {
                Log.d(TAG,"onNext   : "+Thread.currentThread().getName());

            }
              //           onError   ,       ,    
            @Override
            public void onError(Throwable e) {
                Log.d(TAG,"onError   : "+Thread.currentThread().getName());
            }
              //           onComplete   ,       ,    
            @Override
            public void onComplete() {
                Log.d(TAG,"onComplete   : "+Thread.currentThread().getName());
            }
        })

//   :    new Consumer     ,
new Consumer() {
             //accept          
           @Override
           public void accept(Integer integer) throws Exception {
               Log.d(TAG,"  : "+integer);
           }
       })
       

3.サブスクリプションリンク被観察者と観察者との橋渡し
observable.subscribe(observer);


4.上記の知識点に基づいて、具体的なコードを記述するために、プロジェクトを具体的に作成します.
4.1.まずappのbuild.gradleファイルには、次の依存関係が追加されます.
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.7'


4.2.Activityクラスを作成し、コードを記述します.
/**
 * wuminjian 2018.4.27
 */
public class MainTwoActivity extends Activity {
    public static final String TAG = "MainTwoActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_dianzhan11111);
        AppSettings.getInstance(MainTwoActivity.this);

        testRxJava();
    }

    private void testRxJava() {
        Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(ObservableEmitter e) throws Exception {
                //               
                e.onNext("hello");
                e.onNext("RxJava");
                e.onComplete();
            }
        }).subscribe(new Observer() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "    subscribe  ");
            }

            @Override
            public void onNext(String s) {
                Log.d(TAG,"    :"+s);
            }

            @Override
            public void onError(Throwable e) {
                Log.d(TAG, " Error      ");
            }

            @Override
            public void onComplete() {
                Log.d(TAG, " Complete      ");
            }
        });
    }
}


印刷結果
04-26 19:58:53.100 11189-11189/? D/MainTwoActivity:     subscribe  
04-26 19:58:53.100 11189-11189/? D/MainTwoActivity:     :hello
04-26 19:58:53.100 11189-11189/? D/MainTwoActivity:     :RxJava
04-26 19:58:53.100 11189-11189/? D/MainTwoActivity:  Complete      


以上のコードRxJavaコードがチェーン式の下のモードかどうかを見て、構造がはっきりしていて、優雅です.以上は主にRxJavaの基本的な知識と具体的な簡単な使用を紹介し、次の文章では具体的なapiの使用の詳細を紹介します.