成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

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

keke / 1831人閱讀

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

本文目標(biāo)

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

開發(fā)環(huán)境

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執(zhí)行一個異步任務(wù)的基礎(chǔ)架子
     */
    Observable.create(new Observable.OnSubscribe() {
        @Override
        public void call(Subscriber subscriber) {
            //TODO 異步任務(wù)開始執(zhí)行
            subscriber.onNext(new Object());//將執(zhí)行結(jié)果返回
            subscriber.onCompleted();//結(jié)束異步任務(wù)
        }
    })
            .subscribeOn(Schedulers.io())//異步任務(wù)在IO線程執(zhí)行
            .observeOn(AndroidSchedulers.mainThread())//執(zhí)行結(jié)果在主線程運行
            .subscribe(new Subscriber() {
                @Override
                public void onStart() {
                    //TODO 異步任務(wù)執(zhí)行前的操作
                    super.onStart();
                }

                @Override
                public void onCompleted() {
                    //TODO 異步任務(wù)執(zhí)行完后的操作
                }

                @Override
                public void onError(Throwable e) {
                    //TODO 異步任務(wù)執(zhí)行失敗后的操作
                }

                @Override
                public void onNext(Object o) {
                    //TODO 處理異步任務(wù)的執(zhí)行結(jié)果
                }
            });
舉個栗子
    /**
     * 在這個栗子中將展示使用rxjava執(zhí)行一個最簡單的異步任務(wù)
     * 栗子將會完成如下工作
     * 1. 在任務(wù)執(zhí)行前顯示進(jìn)度條
     * 2. 線程休眠1秒,模擬異步任務(wù)的執(zhí)行,然后返回一段字符串作為執(zhí)行結(jié)果
     * 3. 關(guān)閉進(jìn)度條,處理異步任務(wù)的執(zhí)行結(jié)果
     */
    private void executeAsyncTask() {
        //Observable#create方法創(chuàng)建一個異步任務(wù)
        Observable.create(new Observable.OnSubscribe() {
            @Override
            public void call(Subscriber subscriber) {
                //在call方法中執(zhí)行異步任務(wù)
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //注意:如果異步任務(wù)中需要拋出異常,在執(zhí)行結(jié)果中處理異常。需要將異常轉(zhuǎn)化未RuntimException
                    throw new RuntimeException(e);
                }
                count++;
                //調(diào)用subscriber#onNext方法將執(zhí)行結(jié)果返回
                subscriber.onNext("成功執(zhí)行異步任務(wù)" + count + "次");
                //調(diào)用subscriber#onCompleted方法完成異步任務(wù)
                subscriber.onCompleted();
            }
        })
                .subscribeOn(Schedulers.io())//指定異步任務(wù)在IO線程運行
                .observeOn(AndroidSchedulers.mainThread())//制定執(zhí)行結(jié)果在主線程運行
                .subscribe(new Subscriber() {

                    ProgressDialog progressDialog;

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

                    @Override
                    public void onCompleted() {
                        //在異步任務(wù)執(zhí)行完成后關(guān)閉進(jìn)度條
                        Log.i(TAG, "onCompleted");
                        if (progressDialog != null) {
                            progressDialog.dismiss();
                            progressDialog = null;
                        }
                    }

                    @Override
                    public void onError(Throwable e) {
                        //如果異步任務(wù)執(zhí)行失敗則關(guān)閉進(jìn)度條,并打印錯誤日志
                        if (progressDialog != null) {
                            progressDialog.dismiss();
                            progressDialog = null;
                        }
                        Log.e(TAG, "onError: execute async task fail", e);
                    }

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

    }
關(guān)于本文

目前網(wǎng)上有很多關(guān)于rxjava不錯的文章,在后面完也會附上地址。但是本文的目的不是詳細(xì)的介紹rxjava的各種特性、最佳實踐、實現(xiàn)原理。相反的我希望本文的作用更加類似于一個快速上手的手冊。新人可以快速上手,老手也可以快速參考。

補充鏈接

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/64986.html

相關(guān)文章

發(fā)表評論

0條評論

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