• 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)

     1 Subscriber<String> mSubScribler = new Subscriber<String>() {
     2     @Override
     3     public void onCompleted() {
     4         Log.i(TAG, "onCompleted: ");
     5     }
     6 
     7     @Override
     8     public void onError(Throwable e) {
     9         Log.i(TAG, "onError: " + e.getMessage());
    10     }
    11 
    12     @Override
    13     public void onNext(String s) {
    14         Log.i(TAG, "onNext: " + s);
    15     }
    16 };

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

    3.创建被观察者Observable

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

    快捷创建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.简洁的写法

     1 String[] word= new String[]{"hello", "world", "chinses"};
     2 Observable.from(word).subscribe(
     3     new Action1<String>() {
     4         @Override
     5         public void call(String s) {
     6             //Action1<String>相当于Subscriber的onNext(String s)
     7             Log.i(TAG, "call: " + s);
     8         }
     9     },new Action1<Throwable>() {
    10         @Override
    11         public void call(Throwable throwable) {
    12             // Action1<Throwable>相当于Subscriber的onError(Throwable e)
    13             Log.i(TAG, "call: "+throwable.getMessage());
    14        }
    15     }, new Action0() {
    16         @Override
    17         public void call() {
    18             //Action0相当于Subscriber的onCompleted()
    19             Log.i(TAG, "call: onCompleted");
    20         }
    21 });

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

     

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

  • 相关阅读:
    Spring中@Autowired注解、@Resource注解的区别 (zz)
    ECLIPSE使用HG插件去上载 GOOGLE.CODE下的代码
    jrebel
    myeclipse 上安装 Maven3
    web项目目录结构
    笔记 利用python进行数据分析
    算法浅入浅出之Textrank
    算法浅入浅出之TF-IDF
    python库之jieba小试牛刀 3
    python库之jieba小试牛刀 2
  • 原文地址:https://www.cnblogs.com/ganchuanpu/p/6884839.html
Copyright © 2020-2023  润新知