Android RxJava
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
逐步学习:
(注意对持有的context导致的内存泄露)解决方法,把Subscription加入到队列中进行管理,当activity关闭时,对Subscription进行清除。
Flipoard 的扔物线了,著名的开源库 MaterialEditText 作者,还是著名的 codeKK 上 Dagger 源码解析作者。
- GitHub 主页:rengwuxian (Kai Zhu) · GitHub
- 他的 RxJava 教程:给 Android 开发者的 RxJava 详解
接下来再推荐一位对岸的小伙伴 yongjhih ,同样是 RxJava 的狂热爱好者,虽然不如大头鬼和扔物线著名,不过教程和代码都是相当漂亮,他的 GitHub 上有很多关于 RxJava 的 Examples 。
- GitBook 主页:Andrew Chen (@yongjhih) on GitBook
- GitHub 主页:yongjhih (Andrew Chen) · GitHub
- 开发技术前线:RxJava | 搜索结果
- 韩国 GDG 的 RxJava 实例:GDG-Korea/HelloRx · GitHub
- 一些 RxJava Examples:kaushikgopal/RxJava-Android-Samples · GitHub
- 中文 RxDocs:mcxiaoke/RxDocs · GitHub 可以在这里下载 GitBook:介紹 | ReactiveX文档中文翻译
- 泡网上搜索 RxJava 关键字也有不少好文章:泡在网上的日子
Android RxJava的更多相关文章
- Android RxJava 2 的用法 just 、from、map、subscribe、flatmap、Flowable、Function、Consumer ...【转】
先简单说说RxJava的用途与价值 原文出处:Android RxJava 2 的用法 用途: 异步 (也就是开线程跳转) 价值: 面对复杂的逻辑,它依然 简洁 ,代码 易读 RxJava2 与 Rx ...
- 深入Android RxJava 2
这篇文章是根据Jake Wharton在GOTO CopenHagen 2016上的讲话整理的. 下一个版本(2.0)的RxJava还在开发中.虽然observable.订阅管理和背压(backpre ...
- Android RxJava+Retrofit完美封装
作者简介 本篇来自 小河马 的投稿,分享了自己是如何进行 RxJava+Retrofit 的封装.本文的技术点自然没话说,另外对于这种模块化的思路,希望能帮助到大家.最后提前祝大家周末愉快以及圣诞快乐 ...
- Android RxJava/RxAndroid结合Retrofit使用
概述 RxJava是一个在 Java VM 上使用可观測的序列来组成异步的.基于事件的程序的库.更重要的是:使用RxJava在代码逻辑上会非常简洁明了,尤其是在复杂的逻辑上.告别迷之缩进. RxAnd ...
- Android - Rxjava 使用和原理
用RxJava写的一个Android的小Demo 我所理解的RxJava——上手其实很简单 http://www.jianshu.com/p/5e93c9101dc5
- Android RxJava小结
一.如何使用 在build.gradle中添加依赖 dependencies { api 'io.reactivex:rxandroid:1.2.1' api 'io.reactivex:rxjava ...
- Android RxJava 2.0中backpressure(背压)概念的理解
英文原文:https://github.com/ReactiveX/RxJava/wiki/Backpressure Backpressure(背压.反压力) 在rxjava中会经常遇到一种情况就是被 ...
- Android RxJava使用介绍(三) RxJava的操作符
上一篇文章已经具体解说了RxJava的创建型操作符.本片文章将继续解说RxJava操作符.包括: Transforming Observables(Observable的转换操作符) Filterin ...
- Android RxJava基本流程和lift源码分析
基本结构 我们先来看一段最基本的代码,分析这段代码在RxJava中是如何实现的. Observable.OnSubscribe<String> onSubscriber1 = new Ob ...
随机推荐
- Expected one result (or null) to be returned by selectOne(), but found: 3
Expected one result (or null) to be returned by selectOne(), but found: 3 返回应该是对象但是给的是list
- Ajax增删改查-----------删 改
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Spring Boot 导出Excel表格
Spring Boot 导出Excel表格 添加支持 <!--添加导入/出表格依赖--> <dependency> <groupId>org.apache.poi& ...
- SSD垃圾回收
A complete GC typically:includes four steps: selecting some blocks that contain somestale data as vi ...
- POJ 1364 / HDU 3666 【差分约束-SPFA】
POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c — sum[a]<=sum[a+b+1]−c−1 ...
- Spring MVC基础知识整理➣环境搭建和Hello World
概述 Spring MVC属于SpringFrameWork的产品,采用Model-View-Controller进行数据交互,已经融合在Spring Web Flow里面.Spring 框架提供了构 ...
- Java基础知识➣网络Socket(六)
概述 网络编程是指编写运行在多个设备(计算机)的程序,这些设备都通过网络连接起来. java.net 包中提供了两种常见的网络协议的支持: TCP:TCP 是传输控制协议的缩写,它保障了两个应用程序之 ...
- Codeforces 1017F The Neutral Zone (看题解)
这题一看就筛质数就好啦, 可是这怎么筛啊, 一看题解, 怎么会有这么骚的操作. #include<bits/stdc++.h> #define LL long long #define f ...
- JS合并数组的几种方法及优劣比较
本文属于JavaScript的基础技能. 我们将学习结合/合并两个JS数组的各种常用方法,并比较各种方法的优缺点. 我们先来看看具体的场景: var q = [ 5, 5, 1, 9, 9, 6, 4 ...
- android测试--常用控件测试及测试经验(常见)
1.图片选择器 ================测试中遇到的问题记录(除表中记录的)================================================== ①.曾出现,断 ...