摘要:本文目標(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舉個栗子
/** * 在這個栗子中將展示使用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關(guān)于本文() { @Override public void call(Subscriber super String> 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); } }); }
目前網(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
閱讀 3233·2021-11-11 16:55
閱讀 2498·2021-10-13 09:39
閱讀 2427·2021-09-13 10:27
閱讀 2164·2019-08-30 15:55
閱讀 3093·2019-08-30 15:54
閱讀 3137·2019-08-29 16:34
閱讀 1829·2019-08-29 12:41
閱讀 1073·2019-08-29 11:33