Rxjava1和Rxjava2的区别

出现了两种观察者模式:
Observable ( 被观察者 ) / Observer ( 观察者 )
Flowable (被观察者)/ Subscriber (观察者)
在这里插入图片描述

可以使用下面的代码进行打算执行

if(!disposable.isDisposed()){
    disposable.dispose();
}

使用Consumer来代替Action等方法 表示有多少个返回值
Consumer 即消费者,用于接收单个值,BiConsumer 则是接收两个值,Function 用于变换对象,Predicate 用于判断
Func1 和 Func2 改为了 Function 和 BiFunction。表示有多少个参数。

可以使用doOnNext() 来处理数据变化后的工作,并且可以指定线程。
每次调用observeOn()就能切换一次线程

map 操作符 和rxjava1相同
采用 concat 操作符先读取缓存再通过网络请求获取数据 例如:很多时候(对数据操作不敏感时)都需要我们先读取缓存的数据,如果缓存没有数据,再通过网络请求获取,随后在主线程更新我们的UI。利用 concat 的必须调用 onComplete 后才能订阅下一个 Observable 的特性,我们就可以先读取缓存数据,倘若获取到的缓存数据不是我们想要的,再调用 onComplete() 以执行获取网络数据的 Observable,如果缓存数据能应我们所需,则直接调用 onNext(),防止过度的网络请求,浪费用户的流量。
concat连接操作符,依次执行两个Observable对象。

Observable.concat(cacheObservable, netWorkObservable).xxx  这里面的两个参数就是Observable对象

zip 操作符。 该合并不是连接。 zip 操作符可以将多个 Observable 的数据结合为一个数据源再发射出去。 zip 组合事件的过程就是分别从发射器 A 和发射器 B 各取出一个事件来组合,并且一个事件只能被使用一次,组合的顺序是严格按照事件发送的顺序来进行的。

Observable.zip(firstObservable, integerObservable, new BiFunction<String, Integer, String>() {
        @Override
        public String apply(String s, Integer integer) throws Exception {
            return s + integer + "==啦啦";
        }
}).

使用Map 和flatMap的区别就是Map返回的具体的对象,而flatMap返回的是Observable对象。
在concatMap和flatMap的区别就是concatMap保证了执行的顺序性,并且如果在concatMap中做延时后,能够保证每个onNext()执行都被延时。但是flatMap()就会在一次延时后全部执行。

Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
    emitter.onNext(1);
    emitter.onNext(2);
    emitter.onNext(3);
}
}).concatMap(new Function<Integer, ObservableSource<String>>() {
    @Override
    public ObservableSource<String> apply(Integer integer) throws Exception {

        ArrayList<String> strings = new ArrayList<>();
        for (int i = 0; i < 5; i++) {
            strings.add(i + "");
        }
    return Observable.fromIterable(strings).delay(2, TimeUnit.SECONDS);
}
}).subscribe(new Consumer<String>() {
    @Override
    public void accept(String s) throws Exception {
    Log.e("TAG", "s===" + s);
}
});

distinct() 进行数组的去重

Observable.just(1, 1, 1, 1, 2, 2, 2, 2)
.distinct().subscribe(new Consumer<Integer>() {
   @Override
    public void accept(Integer integer) throws Exception {
	    Log.e("TAG", "integer===" + integer);
  }
});

filter() 进行过滤,设置过滤条件

Observable.just(1, 323, 434, 66, 88, 9999)
.filter(new Predicate<Integer>() {
    @Override
    public boolean test(Integer integer) throws Exception {
        return integer < 100;
    }
}).subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        Log.e("TAG", "integer==" + integer);
    }
});

buffer(count ,skip) 这是将Observable中的数据按照skip分成不超过count的buffer

Observable.just(1, 2, 3, 4, 5)
.buffer(3, 2)
.subscribe(new Consumer<List<Integer>>() {
    @Override
    public void accept(@NonNull List<Integer> integers) throws Exception {
        StringBuilder mRxOperatorsText=new StringBuilder();
        for (Integer i : integers) {
            mRxOperatorsText.append(i + "");
            Log.e("TAG", i + "");
        }
        mRxOperatorsText.append("\n");
        Log.e("TAG", "\n");
    }
});

这是先将1,2,3分成一组,然后跳过2个后,将3,4,5分成一组,然后又跳过2个,将5分成一组。然后打印

Timer()相当于一个定时任务

Observable.timer(2, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
        @Override
        public void accept(Long aLong) throws Exception {
            Log.e("TAG", "along==" + aLong);
        }
});

interval(延迟时间,间隔时间,时间单位) 操作符实现心跳间隔任务,这个是循环的定时器

Observable.interval(2, 2, TimeUnit.SECONDS)
.subscribe(new Consumer<Long>() {
    @Override
    public void accept(Long aLong) throws Exception {
        Log.e("TAG", "along==" + aLong);
    }
});

这个要注意防止内存的泄漏,应该在onDestroy()中判断

if(mDisposable!=null&&!mDisposable.isDisposed){
mDisposable.dispose();
}

doOnNext() 这是在订阅者最终获取数据的时候,做一些的数据处理,比如做一些数据的存储。

skip(count) 表示跳过count个数组开始接受数据。

take(count)表示最多获取count条数据

just(A ,B,C…) 表示依次发射事件。

Single 只会接受一个参数

Single.just(1)
.subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
        Log.e("TAG", "integer==" + integer);
    }
});

debounce(时间,单位) 去除抖动 去除频率过高的数据 也就是去除小于这个时间的数据

last()获取到最后一条数据

merge就是将多个Observable结合起来,但是和concat的区别就是不用等到第一个Observable发送完毕再进行下一个Observable的发送。
reduce() 可以对just()中的数值进行统一的计算,显示最终的结果

Observable.just(1, 2, 3)
.reduce(new BiFunction<Integer, Integer, Integer>() {
    @Override
    public Integer apply(Integer integer, Integer integer2) throws Exception {
        Log.e("TAG", "integer==" + integer + " integer2==" + integer2);
        return integer + integer2;
    }
}).subscribe(new Consumer<Integer>() {
    @Override
    public void accept(Integer integer) throws Exception {
         Log.e("TAG", "integer==" + integer);
    }
});

scan() 和上面的reduce()功能相同,但是会把每一步的都结果都显示出来。

https://github.com/amitshekhariitbhu/Fast-Android-Networking 支持rxjava的okhttp库 Fast-Android-Networking

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值