RxJava浅析

RxJava 优点

改变思维,思路整洁,提升效率
(1)改变我们的编程思维方式,让我们的编写的代码更加高效
(2)能够梳理代码流程,更加清晰整洁

RXjava是一个响应式的编程,运用RxJava本身不会提升代码执行效率,它不针对也不解决任何问题,而是从编程思想层面来改变我们的编程思维,能够梳理代码流程,更加清晰整洁,从而让我们编写的代码更加高效,更易维护。

备注:响应式编程是一种通过异步和数据流来构建事务关系的编程模型。例如:APP初始化逻辑,完成SDK初始化,数据库初始化,登陆,之后跳转主界面。

RxJava在github上官方解释

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.

翻译过来是:
RxJava是一个响应扩展的Java VM实现:一个通过使用可观察序列来组合异步和基于事件的程序的库。

它扩展了观察者模式以支持数据/事件序列,并添加了操作符,允许您以声明的方式将序列组合在一起,同时抽象出对底层线程、同步、线程安全和并发数据结构等问题的关注。

接入:

implementation "io.reactivex.rxjava2:rxjava:2.0.6"
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

示例代码

//Observable : 被观察者(起点)
//Observer: 观察者(终点)
        
        //被观察者(起点) 
        Observable
                //执行顺序的第二步
                .just(IMG_PATH) //IMG_PATH 事件源
                //执行顺序的第三步
                .map(new Function<String, Bitmap>() {
                    @Override
                    public Bitmap apply(@NonNull String s) throws Exception {
                        //耗时操作 不用加try-catch因为该方法已捕获异常
                        //通过路径 s 异步加载 bitmap
                        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher);
                        return bitmap;
                    }
                })
                .map(new Function<Bitmap, Bitmap>() {
                    @Override
                    public Bitmap apply(@NonNull Bitmap bitmap) throws Exception {
                        //可以进行加水印等后续操作
                        return bitmap;
                    }
                })

                //给上游分配异步线程(订阅线程)
                .subscribeOn(Schedulers.io())

                //给下游分配安卓主线程(观察者Observer执行的线程)
                .observeOn(AndroidSchedulers.mainThread())

                //订阅 关联 起点(被观察者Observable)和(观察者Observer)终点
                .subscribe(new Observer<Bitmap>() {
                    @Override
                    public void onSubscribe(@NonNull Disposable d) {
                        //执行顺序的第一步
                        //弹出加载提示框
                    }

                    @Override
                    public void onNext(@NonNull Bitmap bitmap) {
                        //执行顺序的第四步
                        image.setImageBitmap(bitmap);
                    }

                    @Override
                    public void onError(@NonNull Throwable e) {
                        //执行顺序的第五步(onError 和onComplete 互斥)
                        //关闭加载提示框
                    }

                    @Override
                    public void onComplete() {
                        //执行顺序的第五步 (onError 和onComplete 互斥)
                        //关闭加载提示框
                    }
                });
        
        //自定义方式
        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("1");
                emitter.onNext("2");
                emitter.onNext("3");
            }
        });

代码图解:

在这里插入图片描述

RxJava是倒“U”形的执行顺序

RxJava中观察者模式和标准的观察者模式区别:

标准的观察者模式:
一个被观察者,可以注册多个观察者,需要自己主动发出事件。

RxJava使用了变种的观察者:
多个被观察者,只能注册一个观察者,一旦注册会马上分发事件。
RxJava观察者备注:1 被观察者显示的是一个,其实源码里是多个;
2 注册在这里叫订阅;
3 subscribe()调这个方法后会直接回调onSubscribe()方法。

感谢:腾讯课堂

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值