Rxjava快速使用手冊——最簡單的異步任務

本文目標

本文的目標是使用盡量少的內容向你展現如何在Android中使用Rxjava編寫一個最簡單的異步任務。若是你是初學者能夠經過本文以最快的速度開啓你的Rxjava之旅。若是你已經接觸過了Rxjava能夠將本文做爲一篇隨時取用的手冊使用。java

開發環境

  1. AndroidStudio 2.1.2react

  2. CompileSdkVersion 23android

  3. BuildToolsVersion 23.0.2git

  4. Rxjava 1.1.7github

  5. Rxandroid 1.2.1異步

依賴引用

compile 'io.reactivex:rxjava:1.1.7'
    compile 'io.reactivex:rxandroid:1.2.1'

如何使用

/**
     * 這是rxjava執行一個異步任務的基礎架子
     */
    Observable.create(new Observable.OnSubscribe<Object>() {
        @Override
        public void call(Subscriber<? super Object> subscriber) {
            //TODO 異步任務開始執行
            subscriber.onNext(new Object());//將執行結果返回
            subscriber.onCompleted();//結束異步任務
        }
    })
            .subscribeOn(Schedulers.io())//異步任務在IO線程執行
            .observeOn(AndroidSchedulers.mainThread())//執行結果在主線程運行
            .subscribe(new Subscriber<Object>() {
                @Override
                public void onStart() {
                    //TODO 異步任務執行前的操做
                    super.onStart();
                }

                @Override
                public void onCompleted() {
                    //TODO 異步任務執行完後的操做
                }

                @Override
                public void onError(Throwable e) {
                    //TODO 異步任務執行失敗後的操做
                }

                @Override
                public void onNext(Object o) {
                    //TODO 處理異步任務的執行結果
                }
            });

舉個栗子

/**
     * 在這個栗子中將展現使用rxjava執行一個最簡單的異步任務
     * 栗子將會完成以下工做
     * 1. 在任務執行前顯示進度條
     * 2. 線程休眠1秒,模擬異步任務的執行,而後返回一段字符串做爲執行結果
     * 3. 關閉進度條,處理異步任務的執行結果
     */
    private void executeAsyncTask() {
        //Observable#create方法建立一個異步任務
        Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                //在call方法中執行異步任務
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //注意:若是異步任務中須要拋出異常,在執行結果中處理異常。須要將異常轉化未RuntimException
                    throw new RuntimeException(e);
                }
                count++;
                //調用subscriber#onNext方法將執行結果返回
                subscriber.onNext("成功執行異步任務" + count + "次");
                //調用subscriber#onCompleted方法完成異步任務
                subscriber.onCompleted();
            }
        })
                .subscribeOn(Schedulers.io())//指定異步任務在IO線程運行
                .observeOn(AndroidSchedulers.mainThread())//制定執行結果在主線程運行
                .subscribe(new Subscriber<String>() {

                    ProgressDialog progressDialog;

                    @Override
                    public void onStart() {
                        //在異步任務執行前打開進度條
                        super.onStart();
                        Log.i(TAG, "onStart");
                        if (progressDialog == null)
                            progressDialog = ProgressDialog.show(MainActivity.this, "", "正在執行異步任務");
                    }

                    @Override
                    public void onCompleted() {
                        //在異步任務執行完成後關閉進度條
                        Log.i(TAG, "onCompleted");
                        if (progressDialog != null) {
                            progressDialog.dismiss();
                            progressDialog = null;
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        //若是異步任務執行失敗則關閉進度條,並打印錯誤日誌
                        if (progressDialog != null) {
                            progressDialog.dismiss();
                            progressDialog = null;
                        }
                        Log.e(TAG, "onError: execute async task fail", e);
                    }

                    @Override
                    public void onNext(String s) {
                        //處理異步任務的執行結果
                        Log.i(TAG, "onNext");
                        tvContent.setText(s);
                    }
                });

    }

關於本文

目前網上有不少關於rxjava不錯的文章,在後面完也會附上地址。可是本文的目的不是詳細的介紹rxjava的各類特性、最佳實踐、實現原理。相反的我但願本文的做用更加相似於一個快速上手的手冊。新人能夠快速上手,老手也能夠快速參考。async

補充連接

給 Android 開發者的 RxJava 詳解
Rxjava項目地址
Rxjava官方文檔
本文代碼ide

相關文章
相關標籤/搜索