Rxjava学习(一基础篇)

一.Rxjava跟EventBus的区别

    RxJava 是一个响应式编程框架,通过一种扩展的观察者设计模式来实现异步操作。 跟AsyncTask和Handler类似,但是比

AsyncTask和Handler更加简洁随着程序逻辑变得越来越复杂,它依然能够保持逻辑的简洁。另外还可以自己封装一个RxBus进行消息

事件的传递,有人可能会问这些功能EventBus也能够做,那么为什么还需要Rxjava呢?RxJava 主要做异步、网络的数据处理;它的

优 点在于它的异步操作的链式调用,这样使代码逻辑更加清晰,另外它可以利用操作符对发出的消息进行一系列的变换,这个

EventBus是办不到的,另外Rxjava没法做到EventBus的设置优先级和消息拦截(可能是我没找到);EventBus的优点在于消息/事件的

传递,如果要它做异步任务操作话就感觉代码有点乱入感;Rxjava更加强大吧,还可以结合Retrofit一起使用


二.RxJava详解

          Observable(被观察者)和Subscriber(订阅者,观察者)是两个主要的类,Rxjava中,一个Observable是一个发出数据或者

事件的类,Subscriber是一个对这些发出数据或者事件进行行动的类;

          一个 Observable(被观察者)可以有多个 Subscribers(订阅者,观察者),并且通过 Observable发出的每一个事件或数据,

该事件或数据将会被发送到Subscriber.onNext() 方法来进行处理。一旦 Observable 不再发出事件或数据,它将会调用

Subscriber.onCompleted()方法,或如果有一个出错的话Observable 会调用 Subscriber.onError() 方法。
          在一个正确运行的事件序列中,onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。
   

三.RxJava的使用

1.依赖

     compile 'io.reactivex:rxjava:1.2.0'
     compile 'io.reactivex:rxandroid:1.2.1'

2.创建Subscriber(Observer)

    Subscriber<String> mSubScribler = new Subscriber<String>() {
        @Override
        public void onCompleted() {
            Log.i(TAG, "onCompleted: ");
        }

        @Override
        public void onError(Throwable e) {
            Log.i(TAG, "onError: " + e.getMessage());
        }

        @Override
        public void onNext(String s) {
            Log.i(TAG, "onNext: " + s);
        }
    };

推荐使用Subscriber,实际上RxJava在subscibe过程中,会先将Observer转换为一个Subscriber。


3.创建被观察者Observable

 Observable mObservable=Observable.create(new Observable.OnSubscribe<String>(){
        @Override
        public void call(Subscriber<? super String> subscriber) {
            //Subscriber将会被调用三次 onNext()和一次 onCompleted())。这样,
            //由被观察者调用了观察者的回调方法,就实现了由被观察者向观察者的事件传递,即观察者模式。
            subscriber.onNext("hi");
            subscriber.onNext("hello");
            subscriber.onNext("myname");
            subscriber.onCompleted();
        }
    });

快捷创建Observable的两种方法:

Observable mObservable=Observable.just("hi","hello","myname");

String[] words = {"Hello", "Hi", "Aloha"};
      Observable observable = Observable.from(words);


4.订阅

        //创建了 Observable 和 Observer 之后,再用 subscribe() 方法将它们联结起来
        //被观察者订阅观察者
        Subscription ubscribe=mObservable.subscribe(mSubscriber);

5.取消订阅

        @Override
        protected void onDestroy() {
          //取消订阅,释放内存,避免内存泄漏
          ubscribe.unsubscribe();
          super.onDestroy();
        }

6.简洁的写法

 

String[] word= new String[]{"hello", "world", "chinses"};
        Observable.from(word).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                //Action1<String>相当于Subscriber的onNext(String s)
                Log.i(TAG, "call: " + s);
            }
        },new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                // Action1<Throwable>相当于Subscriber的onError(Throwable e)
                Log.i(TAG, "call: "+throwable.getMessage());
           }
        }, new Action0() {
            @Override
            public void call() {
                //Action0相当于Subscriber的onCompleted()
                Log.i(TAG, "call: onCompleted");
            }
        });
      

基础的使用差不多就这么多,另外我们需要明白两点:

1.Observable和Subscriber可以做任何事情
      Observable可以是一个数据库查询,Subscriber用来显示查询结果(传递数据);Observable可以是屏幕上的点击事件,
Subscriber用来响应点击事件(传递事件);Observable可以是一个网络请求,Subscriber用来显示请求结果。
     
2.Observable和Subscriber是独立于中间的变换过程的。
     在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程





  

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值