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

(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

逐步学习:(著名全栈 @hi大头鬼hi 的blog)

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

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

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

深入浅出RxJava四-在Android中使用响应式编程  (注意对持有的context导致的内存泄露

如何升级到RxAndroid 1.0

提到 RxJava ,就不能不提中国 RxJava 教父级人物,著名全栈 @hi大头鬼hi ,尤其是 Android 工程师,他翻译的教程帮助了太多太多人,他翻译的教程最大的特点就是精准,即使你字字斟酌,也很难找到缺点。国内很多人翻译或者写的 RxJava 都会先拿去给大头鬼帮忙审校才会发出去,你们说屌不屌?

说完大头鬼,接下来登场的就是 Flipoard 的扔物线了,著名的开源库 MaterialEditText 作者,还是著名的 codeKK 上 Dagger 源码解析作者。

听说他以后的教程都会发在代码家的匠心写作上,所以博客就不贴了,有兴趣的自己去搜一下就能找到。

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

接下来再推荐几个:

我平常看的内容大致就这么多了,其实上面那么多东西,要全都看过来基本不可能,而且只是看应该也只是然并卵,最最重要的还是要不断练习,得自己去写 Demo ,把自己能用 Handler ,AsyncTask ,BroadcastReceiver 等组件都用 RxJava 去实现一遍,这样会比单纯地看教程要有效的多。当然,还有更加重要的一点,要相信自己一定能学好。

 

Android中使用反应式编程RxJava的更多相关文章

  1. (转)Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门

    http://www.ityouknow.com/springboot/2019/02/12/spring-boot-webflux.html Spring 5.0 中发布了重量级组件 Webflux ...

  2. Spring Boot 2 (十):Spring Boot 中的响应式编程和 WebFlux 入门

    Spring 5.0 中发布了重量级组件 Webflux,拉起了响应式编程的规模使用序幕. WebFlux 使用的场景是异步非阻塞的,使用 Webflux 作为系统解决方案,在大多数场景下可以提高系统 ...

  3. Net中的反应式编程

    Net中的反应式编程(Reactive Programming)   系列主题:基于消息的软件架构模型演变 一.反应式编程(Reactive Programming) 1.什么是反应式编程:反应式编程 ...

  4. .NET 4.0 中的契约式编程

    契约式编程不是一门崭新的编程方法论.C/C++ 时代早已有之.Microsoft 在 .NET 4.0 中正式引入契约式编程库.博主以为契约式编程是一种相当不错的编程思想,每一个开发人员都应该掌握.它 ...

  5. Java 中的链式编程

    前言 ​ 在写项目的时候,有一个实体类有好多个属性,new 出来之后需要不停的使用setXXX( )方法,效率低而且代码可读性差,查询了下发现可以实现实体类的链式编程. public class Us ...

  6. 函数响应式编程RxJava

    RxJava 到底是什么 一个词:异步. RxJava 在 GitHub 主页上的自我介绍是 "a library for composing asynchronous and event- ...

  7. 由表单验证说起,关于在C#中尝试链式编程的实践

    在web开发中必不可少的会遇到表单验证的问题,为避免数据在写入到数据库时出现异常,一般比较安全的做法是前端会先做一次验证,通过后把数据提交到后端再验证一次,因为仅仅靠前端验证是不安全的,有太多的htt ...

  8. .Net中的反应式编程(Reactive Programming)

    系列主题:基于消息的软件架构模型演变 一.反应式编程(Reactive Programming) 1.什么是反应式编程:反应式编程(Reactive programming)简称Rx,他是一个使用LI ...

  9. java中的链式编程

    听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...

随机推荐

  1. ViewPager部分源码分析二:FragmentManager对Fragment状态的管理完成ViewPager的child添加或移出

    ViewPager维护child代码流程: 注:PagerAdapter 使用的是FragmentPagerAdapter类或者它的子类. viewPager.populate(): void pop ...

  2. Faster-rnnlm代码分析3 - EvaluateLM(前向计算ForwardPropagate)

    先采用一个简单的输入文本做测试 [root@cq01-forum-rstree01.cq01.baidu.com rnnlm]# pwd /home/users/chenghuige/rsc/app/ ...

  3. probe函数何时调用的

    转自:http://blog.csdn.net/xiafeng1113/article/details/8030248 Linux中 probe函数何时调用的 所以的驱动教程上都说:只有设备和驱动的名 ...

  4. ytu 2558: 游起来吧!超妹!(水题,趣味数学题)

    2558: 游起来吧!超妹! Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 7  Solved: 3[Submit][Status][Web Board ...

  5. [LeetCode] Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numb ...

  6. Howto: Connect MySQL server using C program API under Linux or UNIX

    From my mailbag: How do I write a C program to connect MySQL database server? MySQL database does su ...

  7. linux 操作mysql

    MySQL删除数据库时的错误 ERROR 1010 (HY000): Error dropping database (can't rmdir './myapp', errno: 39)的错误信息. ...

  8. ios本地推送

    #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate //无论程序在 ...

  9. thinkphp数据表操作恐怖事件。

    1当使用thinkphp的where(array())时,如果里面的字段在数据库是没有的,则默认这个条件为1,这时就可能出现大批修改记录问题.如修改所有用户的密码.特别要注意的是,这里的表字段是区分大 ...

  10. 浅谈C++多态性

    本文转载至http://blog.csdn.net/hackbuteer1/article/details/7475622 总结: (1)区分概念:    重载----同一个类中,相同的函数名字,不同 ...