什么是 rxJava?

RxJava is a Java VM implementation of Reactive Extensions: a library for composing asynchronous and event-based programs by using observable sequences.

简单来说,rxJava 是一种 基于事件的,使用了可被观察序列 的异步 响应 扩展 的类库。

这句话有这几个意思:

  rxJava 是解决 异步问题的。

  rxJava 是基于事件机制的。

  rxJava 是处理响应扩展的,解决 事件的响应问题(比如事件的响应在哪个线程?)。

  rxJava 是序列的。它是个有顺序的队列,按顺序的,先进后出的。它对集合对象的支持很好。 

rxJava 使用了 设计模式里的 观察者模式 来实现。

引用类库

   compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'

代码里如何使用

rxJava的代码长这样:

Observable.from(userBeans)
.map(new Func1<UserBean, String>() {
@Override
public String call(UserBean userBean) { return String.format("%s(%s)", userBean.name, userBean.age);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<String>() {
@Override
public void call(String str) { alert(str);
}
});

这段代码告诉了我们:

  Observable.from ()  创建了一个被观察的对象。

  .map() 方法执行了转换,将对象转成字符串

  .subscribeOn() 指示了 在哪个线程里执行 上面的转换操作。

  .observeOn() 指示了 在哪个线程里执行 对结果的响应操作,比如后面的 alert 方法。

  .subscribe() 传递了具体的响应处理,即执行了 alert方法。

代码很优雅,链式的写法,很清晰的表达了代码的行为。

从单个对象创建被观察对象的演示

使用 just() 方法,指定单个对象来创建被观察对象实例。

    private void doSomeOne() {
Observable.just("Hello, world!").subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}

从一个集合创建被观察对象的演示

使用 from() 方法,指定一个集合来创建被观察对象实例。

    private void doSomeArray() {
Observable.from(new String[]{"A", "B", "C"}).subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}

对象转换的演示

我们使用 map() 方法进行转换。下面的代码演示了 从 UserBean数组创建被观察对象,然后使用map()方法转换成 字符串。

    private void doSomeEntity() {
UserBean[] userBeans = new UserBean[3];
userBeans[0] = new UserBean("jo", 18);
userBeans[1] = new UserBean("ken", 9);
userBeans[2] = new UserBean("hack", 30); //增加了map方法,转出 实体到字符串
Observable.from(userBeans).map(new Func1<UserBean, String>() {
@Override
public String call(UserBean userBean) {
return String.format("%s(%s)", userBean.name, userBean.age);
}
}).subscribe(new Action1<String>() {
@Override
public void call(String str) {
alert(str);
}
});
}

参考:

https://github.com/ReactiveX/RxJava

http://gank.io/post/560e15be2dca930e00da1083

在android 上 使用 rxjava 入门篇的更多相关文章

  1. 【Android开发日记】之入门篇(七)——Android数据存储(上)

    在讲解Android的数据源组件——ContentProvider之前我觉得很有必要先弄清楚Android的数据结构. 数据和程序是应用构成的两个核心要素,数据存储永远是应用开发中最重要的主题之一,也 ...

  2. Android Studio2.0 教程从入门到精通Windows版 - 入门篇

    http://www.open-open.com/lib/view/open1468121363300.html 本文转自:深度开源(open-open.com)原文标题:Android Studio ...

  3. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  4. 【Android开发日记】之入门篇(三)——Android目录结构

    本来的话,这一章想要介绍的是Android的系统架构,毕竟有了这些知识的储备,再去看实际的项目时才会更清楚地理解为什么要这样设计,同时在开发中遇到难题,也可以凭借着对Android的了解,尽快找出哪些 ...

  5. 史上最浅显易懂的RxJava入门教程

    RxJava是一个神奇的框架,用法很简单,但内部实现有点复杂,代码逻辑有点绕.我读源码时,确实有点似懂非懂的感觉.网上关于RxJava源码分析的文章,源码贴了一大堆,代码逻辑绕来绕去的,让人看得云里雾 ...

  6. Android数据绑定DataBinding(二)入门篇

    前言 之前写了Android数据绑定DataBinding(一)入门篇,很简单的记录了如何使用DataBinding,其初衷是想要代码中的数据发生改变,不需要繁琐的setText等操作,在最后说到了只 ...

  7. 系列篇|编译可在Android上运行的依赖库(一):glib库

    前言 这是系列文章,它们由<编译可在Android上运行的glib库>及其他4篇文章组成,这4篇文章在“编译依赖库”一节中列出.由于glib库依赖于其他第三方库,所以需要先将依赖的第三方库 ...

  8. Apache Maven 入门篇 ( 上 )

    作者:George Ma 写这个 maven 的入门篇是因为之前在一个开发者会的动手实验中发现挺多人对于 maven 不是那么了解,所以就有了这个想法. 这个入门篇分上下两篇.本文着重动手,用 mav ...

  9. 最牛逼android上的图表库MpChart(一) 介绍篇

    最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...

随机推荐

  1. 2018即将过去,立个flag

    过去的2018 自己有没有值得有意义的地方呢? 没有, 自己有没有认识新的异性朋友呢? 没有, 自己都在忙啥呢? 敲代码,然后发现敲坏了一个键盘,换了HHKB,一个字舒服,还有就是通宵把一部电视剧看完 ...

  2. BZOJ.3545.[ONTAK2010]Peaks(线段树合并)

    题目链接 \(Description\) 有n个座山,其高度为hi.有m条带权双向边连接某些山.多次询问,每次询问从v出发 只经过边权<=x的边 所能到达的山中,第K高的是多少. \(Solut ...

  3. C、C++、C#、Java、php、python语言的内在特性及区别

    C.C++.C#.Java.PHP.Python语言的内在特性及区别: C语言,它既有高级语言的特点,又具有汇编语言的特点,它是结构式语言.C语言应用指针:可以直接进行靠近硬件的操作,但是C的指针操作 ...

  4. AngularJS中获取数据源的几种方式

    在AngularJS中,可以从$rootScope中获取数据源,也可以把获取数据的逻辑封装在service中,然后注入到app.run函数中,或者注入到controller中.本篇就来整理获取数据的几 ...

  5. android: 碎片的demo

    现在你已经将关于碎片的重要知识点都掌握得差不多了,不过在灵活运用方面可能还有 些欠缺,因此又该进入我们本章的最佳实践环节了. 前面有提到过,碎片很多时候都是在平板开发当中使用的,主要是为了解决屏幕空间 ...

  6. Image Processing in Python with Pillow

    Introduction A lot of applications use digital images, and with this there is usually a need to proc ...

  7. shell命令行执行python(解析json)

    每个脚本都有自己的擅长. 有次实现一个work,使用了shell,php,python看着文件种类多,不方便交接,看着也比较麻烦. 减少文件种类数,也是很有必要的. 遇到的场景:shell程序需要从j ...

  8. iOS开发-消息转发

    消息转发是OC运行时比较重要的特性,Objective-C运行时的主要的任务是负责消息分发,我们在开发中"unrecognized selector sent to instance xx& ...

  9. javascript数据类型的判断

    最近看到了很多关于数据类型判断的方法,总结了下 一.javascript的数据类型 js数据分为两种类型:原始数据类型和引用数据类型.原始数据类型有:string.number.boolean.und ...

  10. 版本控制-搭建git服务器

    GitHub是一个免费托管开源代码的Git服务器,如果我们不想公开项目的源代码,又不想付费使用,那么我们可以自己搭建一台Git服务器. 下面我们就看看,如何在Ubuntu上搭建Git服务器.我们使用V ...