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 关键字也有不少好文章:泡在网上的日子
最新文章
- libevent在windows平台下通过vs进行编译
- web api :Action Results in Web API 2
- openssh/ntp/ftp漏洞
- Backbone1.0.0数据验证的变化
- 大话Git
- iOS开发网络篇—JSON介绍
- yii2 实现多表联查
- 调用wcf 得不到HttpWebResponse.ContentLength的长度
- spring.net +dapper 打造简易的DataAccess 工具类.
- 1027-Quicksum
- 阿里云服务器CentOS 5.7(64位)安装配置LAMP服务器(Apache+PHP5+MySQL)
- Java基础笔记-异常
- java代码中 路径符号的写法
- centos装openoffice
- es6语法部分浏览器支持引发的坑
- HMM基础
- Docker 自定义网桥
- [LeetCode] Fibonacci Number 斐波那契数字
- Windows平台下载、安装、配置Apache全攻略
- Java处理对象
热门文章
- 支持向量机-完整Platt-SMO算法加速优化
- spring boot引入json,jsonobject,需要指定jdk15
- .NetCore 下开发独立的(RPL)含有界面的组件包 (六)实现业务功能
- python---手动实现两个有序列表的合并
- 一脸懵逼学习Java操作Excel之POI(Apache POI)
- ASP.NET Core Http请求的处理流程
- HDU 1074 Doing Homework(DP状态压缩)
- noip宝藏
- BZOJ4456/UOJ#184[Zjoi2016]旅行者 分治 最短路
- BZOJ1823 [JSOI2010]满汉全席 2-sat