RxJava2

RxJava2(一)

前言

	**Rxjava2是基于观察者模式下的框架,学习之前最好先了解观察者模式。**

相关类库

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

简单使用

异步+链式编程

Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("消息1");  //发送消息
                emitter.onNext("消息2");
                emitter.onNext("消息3");
                emitter.onNext("消息4");
                emitter.onComplete();           //发送完毕
            }
        })
                .observeOn(AndroidSchedulers.mainThread())//回调在主线程
                .subscribeOn(Schedulers.io())//执行在io线程
                .subscribe(new Observer<String>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    
                    }
                    @Override
                    public void onNext(String value) {
                    
                    }
                    @Override
                    public void onError(Throwable e) {
                    
                    }
                    @Override
                    public void onComplete() {

                    }
                });

应用场景

1.与Retrofit联用
2.Rx系列类库的使用
 	Rxpermissions 、RxBinding 、RxBus等
3.所有用异步的场景
    	借用网上例子
    	比如我们要依次加载10张图片(加载图片是耗时过程),其中第六张我们延时3秒加载,
    	第7张我们复制到sd卡里,第8张我们要上网络,那么请问你要怎么做,如果用Handler,
    	必然是各种嵌套,各种逻辑复杂得让你再看一眼都难受,但是如果使用RxJava呢?
Observable.create(new ObservableOnSubscribe<Drawable>() {
            @Override
            public void subscribe(ObservableEmitter<Drawable> emitter) throws Exception {
                for (int i=0;i<drawableRes.length;i++){
                    Drawable drawable=getResources().getDrawable(drawableRes[i]);
                    //第6个图片延时3秒后架子
                    if (i==5){
                        sleep(3000);
                    }
                    //复制第7张图片到sd卡
                    if (i==6){
                        Bitmap bitmap=((BitmapDrawable)drawable).getBitmap();
                        saveBitmap(bitmap,"test.png", Bitmap.CompressFormat.PNG);
                    }
                    //上传到网络
                    if (i==7){
                        updateIcon(drawable);
                    }
                    emitter.onNext(drawable);
                }
            }
        }).subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<Drawable>() {
                    @Override
                    public void accept(Drawable drawable) throws Exception {
                           //回调后在UI界面上展示出来
                    }
                });

总结

随着程序逻辑变得越来越复杂,RxJava依然能够保持简洁
1.RxJava2.0是非常好用的一个异步链式库,遵循观察者模式。
2.创建RxJava最简单的步骤,一、创建被观察者对象,二、创建观者对象,三、创建订阅关系;
3.所有的异步都可以用RxJava来做。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值