GitHut 地址: https://github.com/ReactiveX/RxAndroid

build.gradle:

 compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.2.2'

(1)RxJava简介:

RxJava 是一个在Java虚拟机上实现的响应式扩展库:提供了基于observable序列实现的异步调用及基于事件编程。

RxJava最核心的两个东西是Observables(被观察者,事件源)和Subscribers(观察者)。Observables发出一系列事件,Subscribers处理这些事件。

它扩展了观察者模式,支持数据、事件序列并允许你合并序列,无需关心底层的线程处理、同步、线程安全、并发数据结构和非阻塞I/O处理。

一个Observable可以发出零个或者多个事件,知道结束或者出错。每发出一个事件,就会调用它的Subscriber的onNext方法,最后调用Subscriber.onNext()或者Subscriber.onError()结束。

RxJava是由Netflix开发的反应式扩展(Reactive Extensions)的Java实现。Reactive Extensions是这样一个第三方库:它结合了可观察集合和LINQ式查询以达到异步和基于事件的编程效果

Netflix将这个库托管到了Github上,支持Java6以上的版本并且使它可以用于Android App开发。

它支持Java5及更高版本,并支持其他一些基于JVM的语言,如Groovy、Clojure和Scala。

我们假设你已经对RxJava有一些了解。如果没有的话,强烈建议先看看这两篇 文章和Netflix在Github Wiki上的前几页。

(2)观察者模式

  1. Observable和Subscriber可以做任何事情
Observable可以是一个数据库查询,Subscriber用来显示查询结果;Observable可以是屏幕上的点击事件,Subscriber用来响应点击事件;Observable可以是一个网络请求,Subscriber用来显示请求结果。

  2. Observable和Subscriber是独立于中间的变换过程的。
在Observable和Subscriber中间可以增减任何数量的map。整个系统是高度可组合的,操作数据是一个很简单的过程。

(3)实现内容

e.g.

Model类中name内容变化时,View(Activity)中Subscribers这个name的变化,同步更新Ui上的Name。
我想到的方式是
在Model中创建Obervable,在setName方法中,写入nameObservable.onNext(newName)这一行。

(ios开发有ReactiveCocoa这个框架,类似rxjava,可以监听成员变量值变化)

ReactiveCocoa是比RxJava更方便一些,RxJava一个比较好的解决这个问题的方法就是为view model创建一个compose subscription,可以参考这个项目 https://github.com/tehmou/rx-android-architecture

逐步学习:

深入浅出RxJava(一:基础篇)

深入浅出RxJava(二:操作符)

深入浅出RxJava三--响应式的好处

深入浅出RxJava四-在Android中使用响应式编程

注意对持有的context导致的内存泄露)解决方法,把Subscription加入到队列中进行管理,当activity关闭时,对Subscription进行清除。

如何升级到RxAndroid 1.0

Flipoard 的扔物线了,著名的开源库 MaterialEditText 作者,还是著名的 codeKK 上 Dagger 源码解析作者。

接下来再推荐一位对岸的小伙伴 yongjhih ,同样是 RxJava 的狂热爱好者,虽然不如大头鬼和扔物线著名,不过教程和代码都是相当漂亮,他的 GitHub 上有很多关于 RxJava 的 Examples 。

 
代码 LittleRx
最主要的4个类:Observable、OnSubscribe、Operator、Subscriber
接下来再推荐几个:

Android RxJava的更多相关文章

  1. Android RxJava 2 的用法 just 、from、map、subscribe、flatmap、Flowable、Function、Consumer ...【转】

    先简单说说RxJava的用途与价值 原文出处:Android RxJava 2 的用法 用途: 异步 (也就是开线程跳转) 价值: 面对复杂的逻辑,它依然 简洁 ,代码 易读 RxJava2 与 Rx ...

  2. 深入Android RxJava 2

    这篇文章是根据Jake Wharton在GOTO CopenHagen 2016上的讲话整理的. 下一个版本(2.0)的RxJava还在开发中.虽然observable.订阅管理和背压(backpre ...

  3. Android RxJava+Retrofit完美封装

    作者简介 本篇来自 小河马 的投稿,分享了自己是如何进行 RxJava+Retrofit 的封装.本文的技术点自然没话说,另外对于这种模块化的思路,希望能帮助到大家.最后提前祝大家周末愉快以及圣诞快乐 ...

  4. Android RxJava/RxAndroid结合Retrofit使用

    概述 RxJava是一个在 Java VM 上使用可观測的序列来组成异步的.基于事件的程序的库.更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上.告别迷之缩进. RxAnd ...

  5. Android - Rxjava 使用和原理

    用RxJava写的一个Android的小Demo 我所理解的RxJava——上手其实很简单 http://www.jianshu.com/p/5e93c9101dc5

  6. Android RxJava小结

    一.如何使用 在build.gradle中添加依赖 dependencies { api 'io.reactivex:rxandroid:1.2.1' api 'io.reactivex:rxjava ...

  7. Android RxJava 2.0中backpressure(背压)概念的理解

    英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure Backpressure(背压.反压力) 在rxjava中会经常遇到一种情况就是被 ...

  8. Android RxJava使用介绍(三) RxJava的操作符

    上一篇文章已经具体解说了RxJava的创建型操作符.本片文章将继续解说RxJava操作符.包括: Transforming Observables(Observable的转换操作符) Filterin ...

  9. Android RxJava基本流程和lift源码分析

    基本结构 我们先来看一段最基本的代码,分析这段代码在RxJava中是如何实现的. Observable.OnSubscribe<String> onSubscriber1 = new Ob ...

随机推荐

  1. openstack 基础

    一:openstack起源: 1.rackspace和NASA(美国国家航空航天局)共同发起的开源项目 1.1/rackspace:贡献的swaft子项目(存储组件) 1.2/NASA:贡献了nova ...

  2. 从零开始学C#——数据类型(三)

    C#数据类型 在C#中,变量分为以下几种类型: 值类型 引用类型 指针类型 值类型 值类型变量可以直接分配给一个值,他们是从类System.ValucTpyc中派生. 值类型直接包含数据,比如int. ...

  3. Ubuntu强制重启后提示emergency mode

    起因 win10+Ubuntu16.04双系统,在ubuntu下训练一个卷积网但是显存拙计卡死了,于是手贱强制按下电源开关重启. 现象 重启后从grub进ubuntu,并不进图形化的登录界面,而是提示 ...

  4. HUAWEI USG6000系列 & NGFW Module V100R001 典型配置案例

    https://support.huawei.com/enterprise/zh/doc/DOC1000047742?section=j00d

  5. [转] 设置div的overflow:scroll,但是在手机上滑动的时候有点卡顿

    设置div的overflow:scroll,但是在手机上滑动的时候有点卡顿,所以在这个div上加一个css: -webkit-overflow-scrolling : touch; 在苹果手机上使用- ...

  6. fputcsv导出大量数据

    <?php set_time_limit(0); ini_set('memory_limit', '128M'); $fileName = date('YmdHis', time()); hea ...

  7. OSPF协议之详细图解

    OSPF是一种基于SPF算法的链路状态路由协议. 上图是在一个OSPF区域里面添入一台新的路由器的时候,OSPF协议的工作过程,如果你能非常详细的叙述出这张图的话,基本上OSPF协议的工作过程你就掌握 ...

  8. TopCoder SRM502 Div1 500 贪心 01背包

    原文链接https://www.cnblogs.com/zhouzhendong/p/SRM502-500.html SRM502 Div1 500 好题. 首先,如果已经确定了解决所有问题的优先级, ...

  9. Codeforces 1071C Triple Flips 构造

    原文链接 https://www.cnblogs.com/zhouzhendong/p/CF1071C.html 题目传送门 - CF1071C 题意 给定一个长度为 n 的 01 数列,限定你在 $ ...

  10. day14,函数的使用方法:生成器表达式,生成器函数

    生成器表达式: #列表推导式 # y = [1,2,3,4,5,6,7,8] # x = [1,4,9,16,25,36,49,64] # x = [] # for i in y: # x.appen ...