美文网首页
RxJava初步理解

RxJava初步理解

作者: 疯狂喷气机 | 来源:发表于2018-02-10 09:51 被阅读0次

最近刚刚接触RxJava还没有更深层次的了解,这里只是随笔记录自己的理解
在Android开发项目中有一些比较耗时的操作,比如加载图片bitmap,网络请求,大文件处理等等,如果这些耗时操作放到主线程中会出现ANR现象导致程序无响应。RxJava相对与其他异步操作的类AsyncTask / Handler有啥好处 ,好处就是简洁,如下:
如果我要加载一个图片的Bitmap ,然后将bitmap在IamgView上面展示

  /**
     * 使用Observable根据图片路径加载bitmap
     * 
     */
   Observable.just(imagePath) .map(new Func1<String, Bitmap>() {
                        @Override
                        public Bitmap call(String s) {
                            Bitmap bmp = loadBitmap(s);
                            return bmp;
                        }
                    })
                    .subscribeOn(Schedulers.io()) // 指定 subscribe() 发生在 IO 线程
                    .observeOn(AndroidSchedulers.mainThread()) // 指定 Subscriber 的回调发生在主线程;
                    .subscribe(new Subscriber<Bitmap>() {
                        @Override
                        public void onCompleted() {
                        }

                        @Override
                        public void onError(Throwable e) {
                            ToastUtil.show("图片加载失败");
                        }

                        @Override
                        public void onNext(Bitmap bitmap) {
                            if (bitmap != null) {
                                identificationResultImgFront.setImageBitmap(bitmap);
                                identificationResultImgFront.setScaleType(ImageView.ScaleType.FIT_CENTER);
                            }
                        }
                    });
        }

   /**
     * 根据图片路径加载bitmap
     *
     * @param pathName
     * @return
     */
    private Bitmap loadBitmap(String pathName) {
        Bitmap b = null;
        try {
            BitmapFactory.Options opts = new BitmapFactory.Options();
            opts.inPreferredConfig = Bitmap.Config.RGB_565;
            b = BitmapFactory.decodeFile(pathName, opts);
        } catch (Exception e) {
            e.printStackTrace();
            b = null;
        } catch (OutOfMemoryError e) {
            e.printStackTrace();
            b = null;
        }
        return b;
    }

加载bitmap是一个耗时操作 这样就可以完美的避免在主线程里面做耗时操作出现程序无响应的问题。
比较好的文章链接如下

给 Android 开发者的 RxJava 详解

相关文章

  • RxJava初步理解

    最近刚刚接触RxJava还没有更深层次的了解,这里只是随笔记录自己的理解在Android开发项目中有一些比较耗时的...

  • Rxjava初步理解

    1、Rxjava是一个可以实现异步操作的库 他可以使得代码的编写变得更为简洁(不是代码数量的减少,而是可读性提高)...

  • Retrofit+RxJava总结

    上次发布的文章Retrofit2.0+RxJava初步 简单介绍了Retrofit2.0与RxJava结合使用, ...

  • 初步认识RXJava

    前言:面向对象变成是命令式编程的一种,面向计算机硬件的抽象,有变量、赋值、表达式和控制语句。函数式编程是面向数学的...

  • Rxjava系列(六) RxJava2.0操作符详解

    Rxjava2.0概述 通过前面的文章介绍,读者对RxJava2.0应该有了初步的认识。RxJava2.0相对1....

  • RxJava 初探

    0.前言 本文主要记录RxJava的初步用法,以对RxJava有一个直观的感受。官网在这里,RxJava项目地址在...

  • 【Android开发】RxJava的使用

    RxJava的理解 先说什么是Rxjava,在Github主页上的介绍是“RxJava is a Java VM ...

  • Rxjava 初步学习使用

    一.原理学习 核心:观察者模式 观察者模式:A 对象(观察者)对 B 对象(被观察者)的某种变化高度敏感,需要在 ...

  • RxJava学习 - 初步了解

    前言 关于RxJava的学习资料已经有很多了,本系列文章算是自己对于RxJava学习的一个过程记录,如果错误请大家...

  • Android技术点

    1.handler源码,handler Handler, Looper的理解 2.rxjava机制 rxjava ...

网友评论

      本文标题:RxJava初步理解

      本文链接:https://www.haomeiwen.com/subject/hblebxtx.html