本文的目標是使用盡量少的內容向你展現如何在Android
中使用Rxjava
編寫一個最簡單的異步任務。若是你是初學者能夠經過本文以最快的速度開啓你的Rxjava
之旅。若是你已經接觸過了Rxjava
能夠將本文做爲一篇隨時取用的手冊使用。java
AndroidStudio 2.1.2react
CompileSdkVersion 23android
BuildToolsVersion 23.0.2git
Rxjava 1.1.7github
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