===================================

  • RxJava 是什么, 能解决什么问题
  • 对比其他技术理解为什么要选择RxJava
  • RxJava的相关API
  • RxJava在Android中的典型使用场景
  • RxJava在Android中与其他框架的融合

今年听到最多的一个词,rxjava+retrofit。火爆程度简直不亚于房价。既然RxJava是今年很火的一门技术,那么要学习一门技术,就要带着这样的疑问,它究竟是什么?它能解决什么问题?对比现有的技术它有什么优势?


RxJava 是什么?

  • github官方介绍:

    RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.
    It extends the observer pattern to support sequences of data/events and adds operators that allow you to compose sequences together declaratively while abstracting away concerns about things like low-level threading, synchronization, thread-safety and concurrent data structures.

    RxJava运行在Java VM上的库,编写异步可观察序列和基于事件的程序。它扩展了观察者模式支持的数据/事件序列并将操作符允许您添加到序列组合在一起以声明的方式而担忧无关的抽象底层线程,同步,线程安全和并发数据结构。

  • 简单来说就是”观察者模式+迭代器模式+函数式编程”,它扩展了观察者模式,通过使用可观察的对象序列流来表述一系列事件,订阅者进行占点观察并对序列流做出反应(或持久化或输出显示等等);借鉴迭代器模式,对多个对象序列进行迭代输出,订阅者可以依次处理不同的对象序列;使用函数式编程思想(functional programming),极大简化问题解决的步骤。

  • 解决问题:

    让复杂的程序逻辑回归简单、清晰

  • RxJava 的四个基本概念:

    • Observable (可观察者/被观察者)
    • Observer (观察者/订阅者)
    • subscribe (订阅)
    • Event (事件)

如何使用

  • build.gradle引入依赖

      compile 'io.reactivex:rxandroid:1.2.0'  compile 'io.reactivex:rxjava:1.1.4'
  • 源码地址

      https://github.com/ReactiveX/RxJava   https://github.com/ReactiveX/RxAndroid 

对比其他技术理解为什么要选择RxJava

  • Observable(被观察者) 和Subscriber(订阅者) 可以做任何事情

    • Observable可以是一个网络请求,Subscriber来显示请求结果;
    • Observable可以是一个数据库查询,Subscriber来显示查询结果;
    • Observable可以是按钮点击事件,Subscriber来响应点击事件;
    • Observable可以是大图片文件的加载解析, Subscriber来展示解析后的图片。

RxJava 使用流程

  1. 创建 Observable 被观察者
  2. 初始化被观察(订阅)后的事件序列
  3. 创建 Observer/Subscriber 观察者/订阅者
  4. 订阅 Subscribe

基本形式

一个最基本的实现: 大家可能暂时看不出有什么作用,这里先讲清基本形式

      //创建一个Observable    /   事件处理    Observable.create(new Observable.OnSubscribe() {                    @Override                  public void call(Subscriber<? super String> subscriber) {                      subscriber.onNext("Hello rxjava");                        //事件序列结束                          subscriber.onCompleted();    //              subscriber.onError();                  }                    //指定一个观察者/事件流程才会启动/在回调中接收结果                }).subscribe(new Subscriber() {                @Override              public void onCompleted() {               }              @Override                public void onError(Throwable e) {            }               @Override               public void onNext(String s) {              }        });        Observable.just(1, 2, 3)          .subscribe(new Observer() {          @Override                public void onCompleted() {            }               @Override                public void onError(Throwable e) {             }               @Override              public void onNext(Integer integer) {              }      });String a[] = {"url1","url2","url3"}; Observable.from(a)          .subscribe(new Observer() {          @Override                public void onCompleted() {            }               @Override                public void onError(Throwable e) {             }               @Override              public void onNext(Integer integer) {              }      });

另一种形式/Subscriber

 Observable.just(1, 2, 3)            .subscribe(new Subscriber() {                  @Override                   public void onStart() {                  super.onStart();                       }                  @Override                 public void onCompleted() {                }                   @Override                  public void onError(Throwable e) {              }                @Override              public void onNext(Integer integer) {           }      });

另一种形式/选择性的传入参数/编程中的闭包(将一个操作以对象的方式传入)

Observable.just(1, 2, 3)          .subscribe(new Action1() {          @Override             public void call(Integer integer) {            }    });Observable.just(1, 2, 3)      .subscribe(new Action1() {        @Override        public void call(Integer integer) {            System.out.println("onNext");        }        }, new Action1() {        @Override        public void call(Throwable throwable) {        }        }, new Action0() {        @Override        public void call() {            System.out.println("onCompleted");        } });

未完待续···

更多相关文章

  1. android 触摸事件传递机制
  2. Android(安卓)实现按钮在没有触摸事件时几秒钟之后自动隐藏
  3. EventBus3 简单使用及注意点
  4. android错误之ListView设置setOnItemClickListener失效
  5. Activity的onConfigurationChanged事件
  6. Android在onTouchEvent或setOnTouchListener中处理长按事件
  7. ButterKnife的使用详解
  8. 探秘ListView的ConvertView以及ViewHolder原理
  9. 【android】使用Event Bus模式解耦Android(安卓)App组件间通信

随机推荐

  1. 关于Android获取屏幕分辨率大小
  2. Android(安卓)高仿QQ 好友分组列表
  3. Androi 编译报错OSError: [Errno 2] No s
  4. Android电源管理之一:基础概览
  5. Android自定义属性时format选项( )
  6. 【Android(安卓)应用开发】Activity 状态
  7. Android之用HttpURLConnection参数以XML
  8. android 中按键响应实例
  9. android http UrlEncode 中文乱码等问题
  10. android实现分享功能