Android:入门神秘Rxjava(本文主要基于Rxjava 2.0)

Rxjava是什么?

官方介绍:

RxJava:a library for composing asynchronous and event-based programs using observable sequences for the Java VM
// 翻译:RxJava 是一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库

总结: 是一个基于事件流和实现异步操作的库,类似于AsyncTask Handler的作用;
原理: 被观察者(Observable)通过订阅(Subscribe)按顺序发送事件(Event)给观察者(Observer),观察者按顺序接受事件并作出处理;

Rxjava基本使用一(同步)

基本使用(一) : 代码简洁 从上到下链式调用

      //创建被观察者 Observable 对象 决定什么时候触发事件以及触发什么样的事件
       Observable.create(new Observable.OnSubscribe<Integer>() {
        @Override
           public void onStart() {
               //事件未发送之前调用 用于做一些准备工作,比如重置数据或者清零
               super.onStart();
           }

           @Override
           public void call(Subscriber<? super Integer> subscriber) {
               //发送事件 相当于 onClick();
               subscriber.onNext(1);
               subscriber.onNext(2);
               subscriber.onNext(3);
               //事件队列完结,当不会有新的onNext,会触发此方法
               subscriber.onCompleted();
           }
       }).subscribe(new Subscriber<Integer>() {
           //创建被观察者对象
           @Override
           public void onCompleted() {
               Log.i(TAG, "对Complete事件作出响应");
           }
           @Override
           public void onError(Throwable e) {
               //异常 同时会触发此方法 不允许再有事件发出
               //onCompleted()和 onError()二者相互排斥 只能调用其一
               Log.i(TAG, "对Error事件作出响应");
           }
           @Override
           public void onNext(Integer integer) {
               Log.i(TAG, "对Next事件"+ integer +"作出响应"  );
           }
       });

打印日志

12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Next事件1作出响应
12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Next事件2作出响应
12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Next事件3作出响应
12-04 11:51:28.295 10585-10585/com.test D/Rxjava: 对Complete事件作出响应

基本使用(二) :

 Observer<Integer> observer=new Observer<Integer>() {
            @Override
            public void onCompleted() {
            }
            @Override
            public void onError(Throwable e) {
            }
            @Override
            public void onNext(Integer integer) {
            }
        };

除了 Observer 接口之外,RxJava 还内置了一个实现了 Observer 的抽象类:Subscriber。 Subscriber 对 Observer 接口进行了一些扩展,他们的基本使用方式是完全一样的;

Rxjava的快速创建事件队列:

Observable observable = Observable.just(1, 2, 3);

创建了 Observable 和 Observer 之后,再用 subscribe() 方法将它们联结起来:

observable.subscribe(observer);
// 或者:
observable.subscribe(subscriber);

上面的方法实现的是同步的观察者模式;

Rxjava基本使用二(异步)

线程控制–Scheduler

Rxjava遵循的是线程不变的原则,哪里调用subscribe(),就在哪里生产事件; 那个线程生产事件,就在那个线程处理事件,如果是垮线程,就需要用到scheduler;(调度器也叫线程控制器);

  • Schedulers.immediate(): 默认在当前线程执行;
  • Schedulers.newThread(): 总是启动新的线程,在新线程中执行操作;
  • Schedulers.io(): (读写文件,读写数据库.网络信息交互等)与newThread()的区别在于io()内部实现使用一个无数量上线的线程池组成,可以重用空闲的线程,所以在一般情况下比newThread()更有效;
  • Schedulers.computation(): 计算所使用的,这个计算是的是CPU 密集型计算,即不会被 I/O 等操作限制性能的操作,例如图形的计算;
  • AndroidSchedulers.mainThread(): 安卓专用的主线程;

通过 subscribeOn() 指定事件产生的线程或者所发生的线程;observeOn() 指定事件消费的线程或者所运行的线程;如下代码所示:

Observable.just(1, 2, 3, 4)
    // 指定 subscribe() 发生在 IO 线程
    .subscribeOn(Schedulers.io()) 
    // 指定 Subscriber 的回调发生在主线程
    .observeOn(AndroidSchedulers.mainThread()) 
    .subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer number) {
            Log.d(tag, "number:" + number);
        }
    });

以上代码的格式几乎算是非常常见,[ 后台线程取数据,前台线程显示 ];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值