7. RxJava RxAndroid

分類:技術 時間:2016-10-25

我見過的講述RxJava很到位的一篇文章

我不喜歡抄襲,轉載,貼上鏈接。

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


ads
ads

相關文章
ads

相關文章

ad