国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

keke / 1822人閱讀

摘要:本文目標本文的目標是使用盡可能少的內容向你展示如何在中使用編寫一個最簡單的異步任務。如果你是初學者可以通過本文以最快的速度開啟你的之旅。相反的我希望本文的作用更加類似于一個快速上手的手冊。新人可以快速上手,老手也可以快速參考。

本文目標

本文的目標是使用盡可能少的內容向你展示如何在Android中使用Rxjava編寫一個最簡單的異步任務。如果你是初學者可以通過本文以最快的速度開啟你的Rxjava之旅。如果你已經接觸過了Rxjava可以將本文作為一篇隨時取用的手冊使用。

開發環境

AndroidStudio 2.1.2

CompileSdkVersion 23

BuildToolsVersion 23.0.2

Rxjava 1.1.7

Rxandroid 1.2.1

依賴引用
    compile "io.reactivex:rxjava:1.1.7"
    compile "io.reactivex:rxandroid:1.2.1"
如何使用
    /**
     * 這是rxjava執行一個異步任務的基礎架子
     */
    Observable.create(new Observable.OnSubscribe() {
        @Override
        public void call(Subscriber subscriber) {
            //TODO 異步任務開始執行
            subscriber.onNext(new Object());//將執行結果返回
            subscriber.onCompleted();//結束異步任務
        }
    })
            .subscribeOn(Schedulers.io())//異步任務在IO線程執行
            .observeOn(AndroidSchedulers.mainThread())//執行結果在主線程運行
            .subscribe(new Subscriber() {
                @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() {
            @Override
            public void call(Subscriber 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() {

                    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的各種特性、最佳實踐、實現原理。相反的我希望本文的作用更加類似于一個快速上手的手冊。新人可以快速上手,老手也可以快速參考。

補充鏈接

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/64986.html

相關文章

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<