1、RxJava的作用  

    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.

    说白了就是大家都说的让你能一眼看出来你之前做什么,之后做什么。它不是简化了代码,而是简化了逻辑。它具有线程安全性。

2、RxJava的原理

   RxJava是基于观察者模式的。用户定义Observer之后,提供一个Observerble,由Observerble进行subscribe,就安心等待结果就行。

   RxJava可以进行事件的排序操作,使用了decorate设计模式和拦截器模式进行操作。在操作的过程中将过程大量的封装为OnSubscribe对象,配合Scheduler完成包装。

  

使用下面一行代码开启循环调用,直至完成事件。

    

Subscriber<? super T> st = hook.onLift(operator).call(o);
try {
// new Subscriber created and being subscribed with so 'onStart' it
st.onStart();
onSubscribe.call(st);
} catch (Throwable e) {
...
}

 

3、RxJava的实现

  

4、RxJava的流程

  

5、RxJava的使用

  5.1 简单的使用

    5.1.1 创建观察者

    5.1.2 创建被观察者

    5.1.3 调用subscribe方法进行订阅。

private void subscribe1() {
//创建一个观察者
Observer<String> observer = new Observer<String>() { @Override
public void onCompleted() {
Log.i(TAG, "Completed");
} @Override
public void onError(Throwable e) {
Log.i(TAG, "Error");
} @Override
public void onNext(String s) {
Log.i(TAG, s);
}
};
//使用Observable.create()创建被观察者
Observable observable1 = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Wrold");
subscriber.onCompleted();
}
});
//订阅
observable1.subscribeOn(Schedulers.newThread()).observeOn(Schedulers.io()).doOnNext(new Observable.OnSubscribe() {
@Override
public void call(Object o) {
System.out.println(o.toString());
}
}).subscribe(observer);
}

  5.2 Retrofit和RxJava的配合:Retrofit和RxJava配合使用时,Retrofit的CallAdapter使用RxJavaCallAdapterFactory生成返回值为Observable<T>的对象。使用该对象进行subscribe操作即可。    

    5.2.1 定义返回数据      

public class UserInfo {
public String username;
public String password;
}

    5.2.2 定义接口,返回值为Observable<T>,即为被观察者对象

interface MyService {
@GET("user/login")
Observable<UserInfo> login(
@Query("username") String username,
@Query("password") String password
);
}

    5.2.3 生成Retrofit对象,配置CallAdapterFactory为RxJavaCallAdapterFactory。

Retrofit retrofit = new Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())//新的配置
.baseUrl(BASE_URL)
.build();

    5.2.4 生成代理类,即被观察者

MyService service = retrofit.create(MyService.class);

    5.2.5 配置事件链和Scheduler,订阅;

String phone = "123";
String password = "123";
service.login(phone, password) //获取Observable对象
.subscribeOn(Schedulers.newThread())//请求在新的线程中执行
.observeOn(Schedulers.io()) //请求完成后在io线程中执行
.doOnNext(new Action1<UserInfo>() {
@Override
public void call(UserInfo userInfo) {
saveUserInfo(userInfo);//保存用户信息到本地
}
})
.observeOn(AndroidSchedulers.mainThread())//最后在主线程中执行
.subscribe(new Subscriber<UserInfo>() {
@Override
public void onCompleted() { } @Override
public void onError(Throwable e) {
//请求失败
} @Override
public void onNext(UserInfo userInfo) {
//请求成功
}
});

RxJava总结(原)的更多相关文章

  1. Rxjava Subjects

    上次提到调用observable的publish和connect方法后可以将一个Observable发出的对象实时传递到订阅在上的subscriber. 这个和Rxjava中Subject的概念十分相 ...

  2. Rxjava cold/hot Observable

    create Observable分为cold以及hot两种,cold主要是静态的,每次subscribe都是从头开始互不干扰,而hot的在同一时刻获得的值是一致的 cold Observable 使 ...

  3. Android开发学习之路-Android中使用RxJava

    RxJava的核心内容很简单,就是进行异步操作.类似于Handler和AsyncTask的功能,但是在代码结构上不同. RxJava使用了观察者模式和建造者模式中的链式调用(类似于C#的LINQ). ...

  4. [RxJava]在学习RxJava中的错误理解

    关于RxJava语法的问题与理解   最近看到一个blog-RxJava 写到关于Observable数据异步加载的介绍.针对fromCallable和just操作符在使用上的问题来跟大家针对代码进行 ...

  5. 理解RxJava:(一)基础知识

    理解RxJava:(一)基础知识 本文翻译自Grokking RxJava, Part 1: The Basics,著作权归原作者danlew所有.译文由JohnTsai翻译.转载请注明出处,并保留此 ...

  6. 一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库 RxJava,相当好

    https://github.com/ReactiveX/RxJava https://github.com/ReactiveX/RxAndroid RX (Reactive Extensions,响 ...

  7. RxJava系列6(从微观角度解读RxJava源码)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  8. RxJava操作符(08-条件和布尔操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51671826 本文出自:[openXu的博客] 目录: All Amb Contains D ...

  9. RxJava操作符(07-辅助操作)

    转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51658445 本文出自:[openXu的博客] 目录: Delay Do Materiali ...

随机推荐

  1. source insight 4.0.86.0安装破解问题

    source insight 4.0.86.0安装过程中碰到导入lic文件一直不正确 解决办法: 需要将SourceInsight\SW_Install\SI4安装及破解文件 目录下的sourcein ...

  2. Mybatis-Generator demo

    使用Mybatis-Generator自动生成Dao.Model.Mapping相关文件(转) https://www.cnblogs.com/smileberry/p/4145872.html == ...

  3. jquery对象中 “冒号” 详解

      冒号  可以理解为 “匹配” 或 “选取”的意思.   $(":button") 表示匹配所有的按钮.$("input:checked")表示匹配所有选中的 ...

  4. webpack 图片文件处理loader

    目录结构: 引用图片: body { /*background: red;*/ /*background: url("../img/test2.jpg"); 小图片*/ backg ...

  5. CentOS6.5下安装jdk配置环境变量错误问题:

    CentOS6.5下安装jdk,使用gedit /etc/profile  配置环境变量为如下: export JAVA_HOME=/usr/soft/jdk7export PATH=$JAVA_HO ...

  6. 透明的UITableView

    // // ViewController.m // 透明table // // Created by LiuWei on 2018/4/23. // Copyright © 2018年 xxx. Al ...

  7. CSU 1503: 点到圆弧的距离(计算几何)

    题目描述 输入一个点 P 和一条圆弧(圆周的一部分),你的任务是计算 P 到圆弧的最短距离.换句话 说,你需要在圆弧上找一个点,到 P点的距离最小. 提示:请尽量使用精确算法.相比之下,近似算法更难通 ...

  8. 【MySQL】实现自增函数sequence

    前言 当前数据库为:mysql由于mysql和oracle不太一样,不支持直接的sequence,所以需要创建一张table来模拟sequence的功能,理由sql语句如下: 步骤 1.创建seque ...

  9. VLOOUP

    VLOOKUP函数是Excel中的一个纵向查找函数 该函数的语法规则如下:VLOOKUP(lookup_value,table_array,col_index_num,range_lookup) 参数 ...

  10. JSP中获取客户端或浏览端信息的方式

    request应用:在JSP页面显示访问者IP  方式一:纯前台,不涉及后台操作.直接在jsp页面中需要显示IP的地方使用 代码:<%=request.getRemoteAddr()%> ...