RxJava2的使用以及RxJava2和RxJava的对比


首选说说RxJava是什么
RxJava总结起来就是两个字,异步。RxJava主要要是用来实现异步操作,常用为网络请求(Retrofit+RxJava),和延迟操作(Flowable.time())

如何引入Rxjava?
添加远程依赖,一般RxJava和RxAndroid配套使用
compile 'io.reactivex.rxjava2:rxjava:2.1.2'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'


RxJava2与RxJava的比较
RxJava RxJava2
RxJava最核心的东西就是Observable和Observer。 RxJava2最核心的是Flowable和Consumer
Observable(可观察者)用于发出数据
Observer(观察者)接受数据,接收Observable中发出数据  
Flowable(被观察者)发出数据
Consumer(观察者)接收数据,接收 Flowable中发出的数据
有了观察者和被观察者,还需要一个订阅(subscribe)

以下为一个RxJava2最基本的使用
Flowable.just("Hello RxJava").subscribe(new Consumer<String>() {
    @Override
    public void accept(@NonNull String s) throws Exception {
        ToastUtils.showShort(s);
    }
}, new Consumer<Throwable>() {
    @Override
    public void accept(@NonNull Throwable throwable) throws Exception {
        throwable.printStackTrace();
    }
});


延时操作
Flowable.timer(5000TimeUnit.MILLISECONDS)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Consumer<Long>() {
            @Override
            public void accept(@NonNull Long aLong) throws Exception {
                ToastUtils.showShort("延迟操作");
            }
        }Throwable::printStackTrace);

注:Flowable.timer默认是在分线程中,如果更改UI、Toast,需要返回主线程。
这里使用RxAndroid,AndroidSchedulers.mainThread

使用RxJava与lambda表达式结合,实现输出
/**
 * 未使用Lambda表达式
 */
Flowable.just("Hello RxJava").subscribe(new Consumer<String>() {
    @Override
    public void accept(@NonNull String s) throws Exception {
        ToastUtils.showShort(s);
    }
}, new Consumer<Throwable>() {
    @Override
    public void accept(@NonNull Throwable throwable) throws Exception {
        throwable.printStackTrace();
    }
});

/**
 * 使用Lambda表达式
 */
Flowable.just("Hello RxJava Lambda").subscribe(s -> {
    ToastUtils.showShort(s);
}Throwable::printStackTrace);

从上面可以看出,使用Lambda表达式可以很大程度的减少代码量
关于Lambda表达式,看另一篇文章, Android中Lambda表达式的使用,以及如何引入

Rxjava中进行耗时操作,需要使用subscribeOn和observeOn
Flowable.fromCallable(new Callable<String>() {
    @Override
    public String call() throws Exception {
        SystemClock.sleep(2000);
        return "Done";
    }
})
        .subscribeOn(Schedulers.newThread())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(s -> {
            ToastUtils.showShort(s);
            cancelLoading();
        }Throwable::printStackTrace);
注:Schedulers.io()分线程中操作,AndroidSchedulers.mainThread()返回主线程

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值