RxJava学习笔记

Where I study 'RxJava' from?

http://gank.io/post/560e15be2dca930e00da1083#toc_1

最近升级到android studio 3.2,发现google正在推崇使用implementation而不是使用compile

引用库了。如果在使用过程中发现compile报错的话,可以使用implementation

RxJava 的github地址:https://github.com/ReactiveX/RxJava

现在引用RxJava的依赖:implmentation"io.reactivex.rxjava2:rxjava:2.1.12"
implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'

What is RxJava?

一个词:异步

"a library for composing asynchronous and event-based programs using observable sequences for the Java VM"(一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库)

Why people would like to use RxJava?

因为:简洁

RxJava随着程序逻辑变得越来越复杂,它依然能够保持简洁。

对比原始代码与RxJava代码:

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

对比两段代码,其实现的目的都是把一个目录下的所有的.png图片加载到UI线程用于显示。虽然RxJava代码量更加多一点,但是它在逻辑上更加简单点。

所以RxJava简洁简单在"逻辑上"

在AndroidStudio上每次打开java文件时,便会出现Lambda化的预览。方便程序员清楚的看到程序逻辑。

Observable.from(folders)
    .flatMap((Func1) (folder) -> { Observable.from(file.listFiles()) })
    .filter((Func1) (file) -> { file.getName().endsWith(".png") })
    .map((Func1) (file) -> { getBitmapFromFile(file) })
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe((Action1) (bitmap) -> { imageCollectorView.addImage(bitmap) });

RxJava 好在哪?就好在简洁,好在那把什么复杂逻辑都能穿成一条线的简洁。

API

1、概念:观察者模式

RxJava的异步的实现,是通过一种扩展的观察者模式来实现的。

观察者模式:
                 就像咱们的大学的社团与社团联合会一样。社团联合会就是观察者,而社团就是被观察者,社团【被观察者】要做什么,要改变什么,得和社团联合会【观察者】提前打招呼。而且,在一开始,【被观察者】社团得向【被观察者】社团联合会注册或者订阅。

你可能感兴趣的:(RxJava学习笔记)