美文网首页
RxJava(一、Is what)

RxJava(一、Is what)

作者: 敲代码的本愿 | 来源:发表于2016-08-23 00:16 被阅读83次

    目录

    一、Is what 是什么
    二、Concept 概念
    三、Basic realization 基本实现
    四、Scheduler 线程控制(上)
    五、Scheduler 线程控制(下)
    六、变换

    因个人学习需要,故文章内容均为网上摘抄整理,感谢创作者的辛勤,源文章地址请看文末。

    RxJava是什么

    简言:一个实现异步操作的库
    GitHub"RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences."(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)。

    RxJava的好处

    简言:简洁
    AsyncTaskHandler:为了异步代码更加简洁;
    RxJava即使程序逻辑复杂,依然能够保持简洁。

    栗子:

    显示多张图片。现有目录数组 File[] folders , 将目录下的 png 图片全部加载,通过 addImage(Bitmap) 方法显示。
    注意,由于读取图片属耗时操作,需放在后台执行,图片的显示必须在 UI 线程执行。

    普通实现方式:

    new Thread() { 
        @Override 
        public void run() { 
            super.run(); 
            for (File folder : folders) { 
                File[] files = folder.listFiles(); 
                for (File file : files) { 
                    if (file.getName().endsWith(".png")) { 
                        final Bitmap bitmap = getBitmapFromFile(file);            
                        getActivity().runOnUiThread(new Runnable() { 
                            @Override 
                            public void run() {      
                                imageCollectorView.addImage(bitmap); 
                            } 
                        }); 
                    } 
                } 
            } 
        }
    }.start();
    

    使用 RxJava ,实现方式如下:

    Observable.from(folders) 
        .flatMap(new Func1<File, Observable<File>>() { 
            @Override 
            public Observable<File> call(File file) { 
                return Observable.from(file.listFiles()); 
            } 
        }) 
        .filter(new Func1<File, Boolean>() { 
            @Override 
            public Boolean call(File file) { 
                return file.getName().endsWith(".png"); 
            } 
        }) 
        .map(new Func1<File, Bitmap>() { 
            @Override 
            public Bitmap call(File file) { 
                return getBitmapFromFile(file); 
            } 
        }) 
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Action1<Bitmap>() { 
            @Override 
            public void call(Bitmap bitmap) { 
                imageCollectorView.addImage(bitmap); 
            } 
        });
    

    由此可见,简洁并非单纯的代码量减少,而是逻辑的简洁。该实现,是一条从上到下的链式调用,没有任何嵌套,这在处理复杂的需求时,优势尤为明显。

    参考
    给 Android 开发者的 RxJava 详解

    相关文章

      网友评论

          本文标题:RxJava(一、Is what)

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