我不喜歡抄襲,轉載,貼上鏈接。
RxJava 簡述一下,RxJava相當于Java版本的Promise,大大增強了異步的可讀性。
其他也無多說,貼上RxJava實現圖片后臺上傳回調。
//圖片地址儲存 private ArrayListlt;Stringgt; dataList; //回調事件定義(訂閱者) private Subscriberlt;Stringgt; stringSubscriber=new Subscriberlt;Stringgt;() { @Override public void onCompleted() { //完成操作(異步的同步需求,見node 的同步實現) } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { File toUpload=new File(s); final String key=HttpHelper.generateKey(user_id,toUpload); dataList.set(dataList.indexOf(s),key); final MultipartRequest multipartRequest= RequestFactory.uploadImg( key, ImageCompressor.compreeImageFile(getBaseContext(),toUpload), new RequestCallback() { @Override public void successCallback(String response) { Log.d(quot;123quot;,response); } @Override public void failCallback(VolleyError error){ } @Override public void processCallback() { } }); myVolleySingleton.addToRequestQueue(multipartRequest); } }; //添加觀察者 rx.Observable.from(dataList).observeOn(AndroidSchedulers.mainThread()).subscribe(stringSubscriber);
摘錄一段關于關于Sechduler的介紹,十分重要。
在RxJava 中,Scheduler ——調度器,相當于線程控制器,RxJava 通過它來指定每一段代碼應該運行在什么樣的線程。RxJava 已經內置了幾個 Scheduler
,它們已經適合大多數的使用場景:
Schedulers.immediate(): 直接在當前線程運行,相當于不指定線程。這是默認的 Scheduler。
Schedulers.newThread(): 總是啟用新線程,并在新線程執行操作。
Schedulers.io(): I/O 操作(讀寫文件、讀寫數據庫、網絡信息交互等)所使用的 Scheduler。行為模式和 newThread() 差不多,區別在于 io()
的內部實現是是用一個無數量上限的線程池,可以重用空閑的線程,因此多數情況下 io() 比 newThread() 更有效率。不要把計算工作放在 io()
中,可以避免創建不必要的線程。
Schedulers.computation(): 計算所使用的 Scheduler。這個計算指的是 CPU 密集型計算,即不會被 I/O 等操作限制性能的操作,例如圖形的計算。這個 Scheduler 使用的固定的線程池,大小為 CPU 核數。不要把 I/O 操作放在 computation() 中,否則 I/O 操作的等待時間會浪費 CPU。
另外, Android 還有一個專用的 AndroidSchedulers.mainThread()
,它指定的操作將在 Android 主線程運行。
以上。
Tags: RxJava RxAndroid
文章來源:http://www.jianshu.com/p/384dface27a8