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. Vue 侦听属性

    Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听属性 <!DOCTYPE html> <html> <head> <meta cha ...

  2. kaildi讲解

    转载声明:本文为转载文章 作者:ferb2015 原文地址:https://blog.csdn.net/eqiang8848/article/details/81543599 kaldi是一个开源的语 ...

  3. I/O性能优化

    原创转载请注明出处:https://www.cnblogs.com/agilestyle/p/11525014.html Linux 系统的 I/O 栈图 I/O性能指标 根据指标找工具 根据工具查指 ...

  4. oracle常用sql汇总(随时更新)

    1.wm_concat:将返回的多行数据汇总为一列,用,分割,数据类型默认为CLOB类型 2. 递归查询(树状结构数据查询,如菜单,部门等等) SELECT [LEVEL],* FEOM table_ ...

  5. android android studio error

    SIMPLE: Error computing //cmake 包含的跨平台头文件或者是源文件路径出错

  6. .Net Core 使用 Swagger 提供API文档

    1.运行环境 开发工具:Visual Studio 2017 JDK版本:.NET Core 2.0 项目管理工具:nuget 2.GITHUB地址 https://github.com/nbfujx ...

  7. View使用总结

    1. View的基础知识 View的位置参数 —— 相对于父容器的位置 view在平移时,top和left表示的是原始左上角位置信息,值不会改变, 改变的是x,y(View左上角坐标),transla ...

  8. Visual Studio 2008 附加进程调试

    关于附加进程调试的问题: 在项目当中经常使用“附加到进程”来调试项目,感觉挺方便的.我们做的项目通常都会发布到IIS(特别是B/S),一可以直接通过地址栏输入地址就可以运行项目,不必去使用开发工具来打 ...

  9. delphi 判断MDI窗体的子窗体是否存在

    //***************************************************************************//函 数名: CreateForm //返 ...

  10. Python操作 Memcache

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据 库驱动网站的速 ...