Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 在android中使用rxjava rxAndroid

在android中使用rxjava rxAndroid

編輯:關於Android編程

最近我聽到不少人提到rxJava,但是在實際項目中並沒有見到,看了一些博客文檔,也看的不太明白,於是拿起Android Studio,先撸一個demo看看。 rxjava使用的是觀察者模式。 Observable 被觀察者 Observer 觀察者 Observable 和 Observer 通過 subscribe 關聯起來。 Created with Rapha?l 2.1.0被觀察者被觀察者觀察者觀察者subscribe

好吧 看起來流程很簡單很簡單,那麼demo走起來。
demo為從sd卡中讀取一張圖片,在imageView中顯示出來,然後做模糊,顯示到另一個imageView中.
在build.gradle中引入

compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.0.1'

這裡就不貼關於模糊的代碼了。直接上rx相關的代碼。
新建一個被觀察者,傳入一個參數–文件地址 dir

Observable observable = Observable.just(dir).map(new Function() {
        @Override
        public Bitmap apply(String s) throws Exception {
            return getBitmap(s);
        }
    })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread());

map方法的參數function制定了被觀察者的行為,兩個泛型參數,第一個為傳入的參數類型,第二個為返回的參數類型。
subscribeOn(Schedulers.io())方法制定了被觀察者的行為發生在io線程。
observeOn(AndroidSchedulers.mainThread())觀察者的行為發生在android的主線程(ui線程);

然後新建一個觀察者。

 Consumer consumer = new Consumer() {
        @Override
        public void accept(Bitmap bitmap) throws Exception {
            iv.setImageBitmap(bitmap);
            fileBitmap = bitmap ;
            blur(bitmap);
        }
    };

Consumer為一個觀察者類,接收bitmap然後做後續操作。
觀察者有了,被觀察者也有了,現在關聯起來。

observable.subscribe(consumer);

好了,一次rx異步回調完成了,但是我們還沒有做照片模糊處理。模糊應該在io之後,就是上面調用的 blur(bitmap) 方法

    private void blur(Bitmap bitmap) {
        Observable blurOjservable = Observable.just(bitmap)
            .map(new Function() {
            @Override
            public Bitmap apply(Bitmap bitmap) throws Exception {
                return boxBlurFilter(bitmap);
            }
        })
        .subscribeOn(Schedulers.computation())
        .observeOn(AndroidSchedulers.mainThread());

        Consumer blurConsumer = new Consumer() {
            @Override
            public void accept(Bitmap bitmap) throws Exception {
                blur_iv.setImageBitmap(bitmap);
                gaosiBitmap = bitmap ;
            }
        };

        blurOjservable.subscribe(blurConsumer);
    }

再一次使用rxjava完成了異步操作,這一次的模糊計算發生在Schedulers.computation()線程,Schedulers.computation()線程用於計算操作,不能在其中做io操作,會阻塞cpu,影響cpu的效率。
一個rxjava demo就完成了,一共兩次回調,一次io線程回調主線程,一次計算線程回調主線程。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved