描述
开 本: 16开纸 张: 胶版纸包 装: 平装-胶订是否套装: 否国际标准书号ISBN: 9787121336409
编辑推荐
RxJava源码剖析
RxJava核心操作符解析
RxJava实战案例分享
RxJava核心操作符解析
RxJava实战案例分享
内容简介
响应式编程是一种基于异步数据流概念的编程模式,在开发手机App、Web App时,要想保证对用户请求的实时响应,给用户带来流畅的体验,响应式编程是一个不错的选择。RxJava则是这种编程模式的Java实现。本书主要介绍如何使用RxJava进行响应式编程。全书一共6章,从响应式编程与RxJava的概念,到RxJava的操作符和源码,以及各种Scheduler的特点和适用场景,均做了较细致的讲解。本书还用一章的篇幅给出了几个RxJava的实用案例,帮助读者理解概念,上手操作。本书适合RxJava的初学者,以及对RxJava有初步了解想要进一步深入学习的读者阅读。
目 录
第1章 走进RxJava的世界 ……………………………………………………………………………………………. 1
1.1 响应式编程………………………………………………………………………………………………………….. 1
1.2 什么是RxJava…………………………………………………………………………………………………. 4
1.3 Observable和Subscriber ………………………………………………………………………………….. 5
1.3.1 Single:单个数据的生产者 ………………………………………………………………………………. 8
1.3.2 Completable:单个事件的生产者 ………………………………………………………………………. 9
1.4 在Android工程中引入RxJava ………………………………………………………………………. 11
第2章 RxJava中的操作符 ……………………………………………………………………………………….. 12
2.1 创建Observable的操作符 ……………………………………………………………………………… 12
2.1.1 range …………………………………………………………………………………………………………… 13
2.1.2 defer和just ………………………………………………………………………………………………….. 13
2.1.3 from ……………………………………………………………………………………………………………. 16
2.1.4 interval ………………………………………………………………………………………………………… 17
2.1.5 repeat和timer ………………………………………………………………………………………………. 19
2.2 转化Observable的操作符 ……………………………………………………………………………… 21
2.2.1 buffer ………………………………………………………………………………………………………….. 21
2.2.2 flatMap ……………………………………………………………………………………………………….. 23
2.2.3 groupBy ………………………………………………………………………………………………………. 25
2.2.4 map……………………………………………………………………………………………………………. 28
2.2.5 cast …………………………………………………………………………………………………………….. 29
2.2.6 scan ……………………………………………………………………………………………………………. 31
2.2.7 window ……………………………………………………………………………………………………….. 32
2.3 过滤操作符 …………………………………………………………………………………………………… 35
2.3.1 debounce ……………………………………………………………………………………………………… 35
2.3.2 distinct ………………………………………………………………………………………………………… 39
2.3.3 elementAt …………………………………………………………………………………………………….. 40
2.3.4 filter ……………………………………………………………………………………………………………. 41
2.3.5 first和last ……………………………………………………………………………………………………. 43
2.3.6 skip和take,skipLast和takeLast …………………………………………………………………….. 45
2.3.7 sample和throttleFirst …………………………………………………………………………………….. 46
2.4 组合操作符 …………………………………………………………………………………………………… 48
2.4.1 combineLatest ……………………………………………………………………………………………….. 48
2.4.2 join和groupJoin …………………………………………………………………………………………… 51
2.4.3 merge和mergeDelayError……………………………………………………………………………….. 55
2.4.4 startWith………………………………………………………………………………………………………. 58
2.4.5 switch …………………………………………………………………………………………………………. 59
2.4.6 zip和zipWith ……………………………………………………………………………………………….. 61
2.5 错误处理操作符 ……………………………………………………………………………………………. 64
2.5.1 onErrorReturn ……………………………………………………………………………………………….. 64
2.5.2 onErrorResumeNext ……………………………………………………………………………………….. 66
2.5.3 onExceptionResumeNext …………………………………………………………………………………. 67
2.5.4 retry ……………………………………………………………………………………………………………. 70
2.6 辅助操作符 …………………………………………………………………………………………………… 72
2.6.1 delay …………………………………………………………………………………………………………… 72
2.6.2 do ………………………………………………………………………………………………………………. 74
2.6.3 materialize和dematerialize ……………………………………………………………………………… 78
2.6.4 subscribeOn和observeOn ……………………………………………………………………………….. 80
2.6.5 timeInterval和timeStamp ……………………………………………………………………………….. 82
2.6.6 timeout ………………………………………………………………………………………………………… 84
2.6.7 using …………………………………………………………………………………………………………… 87
2.7 条件操作 ………………………………………………………………………………………………………. 90
2.7.1 all ………………………………………………………………………………………………………………. 90
2.7.2 amb……………………………………………………………………………………………………………. 92
2.7.3 contains ……………………………………………………………………………………………………….. 93
2.7.4 isEmpty ……………………………………………………………………………………………………….. 94
2.7.5 defaultIfEmpty ………………………………………………………………………………………………. 95
2.7.6 sequenceEqual ………………………………………………………………………………………………. 97
2.7.7 skipUntil和skipWhile ……………………………………………………………………………………. 98
2.7.8 takeUntil和takeWhile ……………………………………………………………………..
1.1 响应式编程………………………………………………………………………………………………………….. 1
1.2 什么是RxJava…………………………………………………………………………………………………. 4
1.3 Observable和Subscriber ………………………………………………………………………………….. 5
1.3.1 Single:单个数据的生产者 ………………………………………………………………………………. 8
1.3.2 Completable:单个事件的生产者 ………………………………………………………………………. 9
1.4 在Android工程中引入RxJava ………………………………………………………………………. 11
第2章 RxJava中的操作符 ……………………………………………………………………………………….. 12
2.1 创建Observable的操作符 ……………………………………………………………………………… 12
2.1.1 range …………………………………………………………………………………………………………… 13
2.1.2 defer和just ………………………………………………………………………………………………….. 13
2.1.3 from ……………………………………………………………………………………………………………. 16
2.1.4 interval ………………………………………………………………………………………………………… 17
2.1.5 repeat和timer ………………………………………………………………………………………………. 19
2.2 转化Observable的操作符 ……………………………………………………………………………… 21
2.2.1 buffer ………………………………………………………………………………………………………….. 21
2.2.2 flatMap ……………………………………………………………………………………………………….. 23
2.2.3 groupBy ………………………………………………………………………………………………………. 25
2.2.4 map……………………………………………………………………………………………………………. 28
2.2.5 cast …………………………………………………………………………………………………………….. 29
2.2.6 scan ……………………………………………………………………………………………………………. 31
2.2.7 window ……………………………………………………………………………………………………….. 32
2.3 过滤操作符 …………………………………………………………………………………………………… 35
2.3.1 debounce ……………………………………………………………………………………………………… 35
2.3.2 distinct ………………………………………………………………………………………………………… 39
2.3.3 elementAt …………………………………………………………………………………………………….. 40
2.3.4 filter ……………………………………………………………………………………………………………. 41
2.3.5 first和last ……………………………………………………………………………………………………. 43
2.3.6 skip和take,skipLast和takeLast …………………………………………………………………….. 45
2.3.7 sample和throttleFirst …………………………………………………………………………………….. 46
2.4 组合操作符 …………………………………………………………………………………………………… 48
2.4.1 combineLatest ……………………………………………………………………………………………….. 48
2.4.2 join和groupJoin …………………………………………………………………………………………… 51
2.4.3 merge和mergeDelayError……………………………………………………………………………….. 55
2.4.4 startWith………………………………………………………………………………………………………. 58
2.4.5 switch …………………………………………………………………………………………………………. 59
2.4.6 zip和zipWith ……………………………………………………………………………………………….. 61
2.5 错误处理操作符 ……………………………………………………………………………………………. 64
2.5.1 onErrorReturn ……………………………………………………………………………………………….. 64
2.5.2 onErrorResumeNext ……………………………………………………………………………………….. 66
2.5.3 onExceptionResumeNext …………………………………………………………………………………. 67
2.5.4 retry ……………………………………………………………………………………………………………. 70
2.6 辅助操作符 …………………………………………………………………………………………………… 72
2.6.1 delay …………………………………………………………………………………………………………… 72
2.6.2 do ………………………………………………………………………………………………………………. 74
2.6.3 materialize和dematerialize ……………………………………………………………………………… 78
2.6.4 subscribeOn和observeOn ……………………………………………………………………………….. 80
2.6.5 timeInterval和timeStamp ……………………………………………………………………………….. 82
2.6.6 timeout ………………………………………………………………………………………………………… 84
2.6.7 using …………………………………………………………………………………………………………… 87
2.7 条件操作 ………………………………………………………………………………………………………. 90
2.7.1 all ………………………………………………………………………………………………………………. 90
2.7.2 amb……………………………………………………………………………………………………………. 92
2.7.3 contains ……………………………………………………………………………………………………….. 93
2.7.4 isEmpty ……………………………………………………………………………………………………….. 94
2.7.5 defaultIfEmpty ………………………………………………………………………………………………. 95
2.7.6 sequenceEqual ………………………………………………………………………………………………. 97
2.7.7 skipUntil和skipWhile ……………………………………………………………………………………. 98
2.7.8 takeUntil和takeWhile ……………………………………………………………………..
前 言
前 言
毫无疑问,RxJava是一个非常优秀的开源库,清晰的流式操作和便捷的线程切换为Java和Android开发者提供了有力的帮助。网上有大量介绍RxJava的文章,开发者可以很容易地查找到相关的学习资料。但是由于RxJava入门比较困难,而且缺乏一本系统地介绍RxJava的中文书籍,所以给很多初学者带来了困扰,不少人浅尝辄止,放弃了深入学习和使用RxJava的机会,这十分可惜。本书作为一本入门书,比较适合RxJava的初学者以及对RxJava有初步了解并想要进一步学习RxJava的读者。
内容结构
本书第1章从响应式编程入手,介绍了RxJava及RxJava的组成部分,帮读者初步了解RxJava。
第2章配合官方的示意图分类介绍了RxJava的大部分操作符。这一章的篇幅比较多,读者在阅读的时候可能无法全部记住,可以在需要时随时翻阅查询。
第3章就各种Scheduler的特点和适合的使用场景做了介绍,帮助读者根据实际需要选择合适的Scheduler。
只知道轮子怎么跑还不够,还有必要知道轮子是如何造的,第4章结合源码研究了RxJava的实现原理。了解原理一方面可以让我们避免用错操作符或者Scheduler,另一方面如果碰到RxJava中的bug,也有助于我们定位bug。发现bug后可以到GitHub上发起一个issue,而且好能够提一个附带的pull request来修复这个bug。
第5章给出了一些实例和基于RxJava的开源库的使用示例,以帮助读者更好地将RxJava应用于实际开发中。
第6章介绍了RxJava 2相对于RxJava 1的改进之处,如果读者已经掌握了RxJava 1,那么RxJava 2也可以很容易地上手。
给初学者的建议
RxJava这种响应式编程方式跟大多数人习惯的命令式编程方式有较大的区别,所以初学者首先需要完成编程思想上的转变,理解RxJava的思想。如可以将Observable看作工厂的原材料生产机器,发送出来的数据即为原材料,整个链式操作可以视为原材料经过一条流水线,每个操作符为流水线上的一个车间,每个车间都会对原材料做一定的加工,终的Subscriber可以视为终消费者,会接收加工后的成品。
其次就是了解RxJava的操作符都有哪些,都有什么样的作用。你不需要一开始就将每个操作符都记住,但是可以大体上记住都有什么功能的操作符,这样在需要时就能够想起哪个操作符能够满足当下的需求。关于操作符的详细使用方式可以参阅第2章。
接下来就是实践环节了。初期可以尝试应用RxJava写一些小程序,并参阅网上的一些开源代码,看看别人都是怎么应用RxJava的。初步掌握之后就可以逐渐将RxJava引入到项目中,来解决一些工作过程中遇到的实际问题。只看不做永远都是眼高手低,只有将RxJava真正地应用到实际开发工作中,不断犯错、不断改进才能真正达到融会贯通的地步,才能真正地掌握RxJava的使用技巧。
后,如果想要进一步学习RxJava,可以阅读源代码,可以深入地跟踪一个操作符的实现过程来了解其原理。如果有可能,可以参与到RxJava的bug修复或者新功能开发中,在GitHub上给RxJava提pull request,上面有很多大神会给你提各种修改意见,理解他们的思路会让你受益匪浅。
毫无疑问,RxJava是一个非常优秀的开源库,清晰的流式操作和便捷的线程切换为Java和Android开发者提供了有力的帮助。网上有大量介绍RxJava的文章,开发者可以很容易地查找到相关的学习资料。但是由于RxJava入门比较困难,而且缺乏一本系统地介绍RxJava的中文书籍,所以给很多初学者带来了困扰,不少人浅尝辄止,放弃了深入学习和使用RxJava的机会,这十分可惜。本书作为一本入门书,比较适合RxJava的初学者以及对RxJava有初步了解并想要进一步学习RxJava的读者。
内容结构
本书第1章从响应式编程入手,介绍了RxJava及RxJava的组成部分,帮读者初步了解RxJava。
第2章配合官方的示意图分类介绍了RxJava的大部分操作符。这一章的篇幅比较多,读者在阅读的时候可能无法全部记住,可以在需要时随时翻阅查询。
第3章就各种Scheduler的特点和适合的使用场景做了介绍,帮助读者根据实际需要选择合适的Scheduler。
只知道轮子怎么跑还不够,还有必要知道轮子是如何造的,第4章结合源码研究了RxJava的实现原理。了解原理一方面可以让我们避免用错操作符或者Scheduler,另一方面如果碰到RxJava中的bug,也有助于我们定位bug。发现bug后可以到GitHub上发起一个issue,而且好能够提一个附带的pull request来修复这个bug。
第5章给出了一些实例和基于RxJava的开源库的使用示例,以帮助读者更好地将RxJava应用于实际开发中。
第6章介绍了RxJava 2相对于RxJava 1的改进之处,如果读者已经掌握了RxJava 1,那么RxJava 2也可以很容易地上手。
给初学者的建议
RxJava这种响应式编程方式跟大多数人习惯的命令式编程方式有较大的区别,所以初学者首先需要完成编程思想上的转变,理解RxJava的思想。如可以将Observable看作工厂的原材料生产机器,发送出来的数据即为原材料,整个链式操作可以视为原材料经过一条流水线,每个操作符为流水线上的一个车间,每个车间都会对原材料做一定的加工,终的Subscriber可以视为终消费者,会接收加工后的成品。
其次就是了解RxJava的操作符都有哪些,都有什么样的作用。你不需要一开始就将每个操作符都记住,但是可以大体上记住都有什么功能的操作符,这样在需要时就能够想起哪个操作符能够满足当下的需求。关于操作符的详细使用方式可以参阅第2章。
接下来就是实践环节了。初期可以尝试应用RxJava写一些小程序,并参阅网上的一些开源代码,看看别人都是怎么应用RxJava的。初步掌握之后就可以逐渐将RxJava引入到项目中,来解决一些工作过程中遇到的实际问题。只看不做永远都是眼高手低,只有将RxJava真正地应用到实际开发工作中,不断犯错、不断改进才能真正达到融会贯通的地步,才能真正地掌握RxJava的使用技巧。
后,如果想要进一步学习RxJava,可以阅读源代码,可以深入地跟踪一个操作符的实现过程来了解其原理。如果有可能,可以参与到RxJava的bug修复或者新功能开发中,在GitHub上给RxJava提pull request,上面有很多大神会给你提各种修改意见,理解他们的思路会让你受益匪浅。
评论
还没有评论。