RxJava简单使用

RxJava是square公司开发的一个用户进行异步操作的类库。功能非常强大,以下介绍几种简单的使用。

1、普通异步操作

Flowable.just("nil").subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.i("TAG","name is "+s);
            }
        });

这是rxjava最简单的应用,是将输入的字符串输出,这里注意的是subscribe方法是定义消费者的意思,RXjava是基于观察者模式实现异步操作的,subscribe定义消费者,在消费者中进行对应操作。注意subscribe是订阅的,按理说应该是消费者订阅被观察者,这里只是为了这种链式调用所以把api故意写为这样,大家无需理会

2、线程切换

Flowable.just("nil")
        .subscribeOn(Schedulers.io())
        .observeOn(Schedulers.newThread())
        .subscribe(new Consumer<String>() {
    @Override
    public void accept(String s) throws Throwable {
        Log.i("TAG","name is "+s);
    }
});

通过subscribeOn指订阅现成即执行操作的现成,observeOn为显影线程,即Consumer中实现方法的执行的线程。Schedulers中的方法这里不做枚举了,最主要的就是这两个,如果集成了rxAndroid,还会有个AndroidSchedulers.mainThread(),一般是用在observeOn中,用户主线程更新UI等

3、类型转换

rxJava最好用,最两点的功能,就是能够异步就输入类型进行转换处理,并在消费者出进行回调处理

  Boy boy = new Boy();
        boy.setAge("23");
        boy.setName("john");
        boy.setHigh("180cm");

        Flowable.just(boy).map(new Function<Boy, String>() {
            @Override
            public String apply(Boy boy) throws Throwable {
                return boy.getHigh();
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.i("Tag","high is : "+s);
            }
        });

上述代码中被观察对象输入是个boy,但是在观察者消费的方法中,所检测的参数却是一个string 字符串(身高)。

4、flatMap

 Boy boy2 = new Boy();
        boy2.setAge("24");
        boy2.setName("john2");
        boy2.setHigh("182cm");

        Boy[] boys = new Boy[]{boy,boy2};
        Consumer boyConsumer = new Consumer<Boy>() {
            @Override
            public void accept(Boy o) throws Throwable {
                Log.i("TAG","high is :"+o.getHigh());
            }
        };

        Observable.fromArray(boys).flatMap(new Function<Boy, ObservableSource<?>>() {
            @Override
            public ObservableSource<?> apply(Boy boy) throws Throwable {
                return Observable.just(boy);
            }
        }).subscribe(boyConsumer);

当要同事注册多个被观察者,就需要用flatmap,flatmap会将所有的被观察者放入一个数列中依次进行订阅。

以上只是为了对rxjava的应用进行简单阐述,觉得例子比较简单,所以其实不用rxjava可能会更简单,但是这里只是简单阐述,几个常用的方法,遇到需要异步场景时,脑中能够考虑rxjava的应用就达到目的了。

rxjava还提供一些其他的小功能,比如延时执行,定时执行等这里就不再赘述了,有兴趣的同学可以自己看一下api。

延时五秒执行

 Flowable.just("nil")
                .delay(5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.newThread())
                .subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.i("TAG","name is "+s);
            }
        });

定时5s执行一次

 Flowable.interval(5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.newThread())
                .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long s) throws Throwable {
                Log.i("TAG","name is "+s);
            }
        });

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值