前 言
有趣的是,在介绍反应式编程之前,我们首先了解一种反应性较弱的平台:Adobe Flash。在被Adobe收购之前,Macromedia构建了一个名为Flex的成熟框架(后来被称为Apache Flex)。Flex中的一个重要概念是每个呈现组件的setData函数。setData函数的作用是接收一个数据对象,它完全包含组件需要呈现的信息。尽管一直没有完全弄清楚如何在原始源和组件预期接收的内容之间转换数据,但我从年轻时就一直致力于编写灵活的DirectX C++代码,这是一个很好的关注点分离。
六年前,由于有了一些平台,我开始与三星公司合作项目。在这个过程中,我尝试将我在Futurice公司工作期间学到的Flex相关知识应用到不同的环境中,以获得不同的结果,但最终产生了更多的概念性问题却不知道答案。
这一次的任务是在Android上创建一个实时体育应用,其中包含一系列具有不同形式和延迟的数据源。我们经常会收到部分数据,但这些数据只用于更新比赛成绩。使用标准工具构建系统似乎非常重要。和经典故事的剧情一样,我的同事Juha Ristolainen曾经读过一篇关于RxJava这个新工具的博文。我想我可以试一试。
必须承认的是,掌握RxJava并将其应用到数据处理问题领域是我学习新技术期间印象最深刻的一次经历。具有讽刺意味的是,第一次经历是在20年前我学Java编程时。查看RxJava已启用的功能,就像一次又一次地寻找拼图中缺失的那些块,我甚至都没有意识到这些块已经丢失。
四年后,事实证明RxJava虽然有明确的概念,但使用起来并不简单。为了掌握其用法,我的同事Olli Jokinen和我花费了数晚时间,试图彻底弄明白这种尚未发布的技术。当时RxJava1还处于Beta测试阶段。最终,我们解决了代码中的问题,代码库也成为我有幸用过的最出色的一种代码库。
你手里拿着的是一本花费数千小时撰写的书,它会告诉你如何使用RxJava进行Android应用开发。这也是我撰写这《反应式编程实战 使用RxJava 2.X开发Android应用》的初衷。
关于本书
RxJava是一个非常强大的工具,你将会通过学习《反应式编程实战 使用RxJava 2.x开发Android应用》来了解如何使用它创建健壮且可持续的代码。与传统的编程方法相比,你将了解思维模式的变化以及这种变化所带来的影响。
《反应式编程实战 使用RxJava 2.X开发Android应用》的读者对象
目前,在几乎所有Android应用的某些部分中使用了反应式编程工具,即RxJava或另一种反应库。因此,对于每个Android开发人员来说,深入了解反应式编程很有必要,以备不时之需。
读者应该对Android平台有一定的了解,这样才能从《反应式编程实战 使用RxJava 2.X开发Android应用》中获益,读者也可从示例中学习该平台的基础知识。请记住,使用RxJava可以实现一些普通Android应用中并不具备的功能,而这正是《反应式编程实战 使用RxJava 2.X开发Android应用》的要点所在!
《反应式编程实战 使用RxJava 2.X开发Android应用》的组织方式:路线图
《反应式编程实战 使用RxJava 2.X开发Android应用》分为三个部分。第Ⅰ部分介绍了RxJava,并让你了解如何在Android平台上使用它。
? 第1章介绍RxJava如何使用debounce操作符处理异步事件。
? 第2章探讨如何使用RxJava满足Android应用的基本网络需求。
? 第3章概述事件和变化状态之间的区别,并介绍了数据处理链。
? 第4章展示如何运用已学到的知识构建一个Flickr客户端。
? 第5章深入讨论自定义的observable,以及如何使用RxJava构建一个功能完整的文件资源管理器应用来高效地处理多线程。
第Ⅱ部分主要讨论视图模型以及如何使用它们优化数据流。
? 第6章扩展文件资源管理器应用,并通过将部分业务逻辑分离到视图模型中来改进体系结构。
? 第7章进一步开发文件资源管理器应用,添加一个模型作为单一数据源。
? 第8章以一款井字游戏的示例应用为例说明视图和视图模型之间的联系。
? 第9章在井字游戏应用中添加一个持久化模型。
? 第10章展示如何对RxJava代码进行单元测试,并将某些测试作为示例添加到井字游戏应用中。
第Ⅲ部分深入探讨如何使用RxJava构建应用的更高级示例。
? 第11章使用WebSocket和RxJava构建一个实时聊天客户端应用。
? 第12章向聊天客户端应用添加一个模型,以加载现有消息并支持尚未发布的消息。
? 第13章使用RxJava创建动态动画,并快速反应用户的交互。
? 作为《反应式编程实战 使用RxJava 2.X开发Android应用》的结尾,第14章介绍一个应用,它使用开源地图图块在RxJava中完整创建一个可拖动和可缩放的地图。
关于代码
《反应式编程实战 使用RxJava 2.X开发Android应用》包含了许多与普通文本对应的源代码示例。
在多数情况下,源代码已经被重新格式化;我们已经添加了换行符,并修改了缩进,以适应书中可用的页面空间。此外,当在文本中描述代码时,通常会在代码清单中删除源代码中的注释。很多代码清单中都会出现代码注释,强调了重要概念。
《反应式编程实战 使用RxJava 2.X开发Android应用》的所有章节都有完整的在线Android代码示例。这些示例从简单的演示到更全面的应用,应有尽有。
可以扫描封底二维码下载《反应式编程实战 使用RxJava 2.X开发Android应用》代码。
关于封面插图
《反应式编程实战 使用RxJava 2.X开发Android应用》封面插图的标题是《1581年阿拉伯妇女的习惯》。这幅插图取自Thomas Jefferys于1757—1772年在伦敦出版的《古代与现代不同民族的服饰合集》(四卷)。扉页上注明这些图画是手工着色的铜版版画,用阿拉伯树胶增加其色彩和透明度。
Thomas Jefferys(1719—1771)被称为“国王乔治三世的地理学家”。他是一位英国制图师,是当时主要的地图供应商。他为政府和其他官方机构绘制和印刷地图,并制作了各种各样的商业地图和地图册,特别是北美地区的地图册。作为一名地图绘制师,他对每个地方的调查和绘制激发了人们对当地服饰习俗的兴趣,这些服饰在该系列作品中展示得淋漓尽致。18世纪后期,人们对其他国家和旅行的迷恋是一种相对较新的现象,像这样的作品很受欢迎,它使其他国家的居民能够了解游客和扶手椅上的旅行者。
Jefferys作品中插图的多样性生动地说明了200多年前世界各国的独特性和个性。从那时起,着装规范已经发生了变化,并且各个地区和国家丰富的着装多样性也逐渐消失了。现在很难区分不同大陆之间的居民。也许,为了乐观地看待这一问题,我们已经用文化和视觉的多样性换取了更丰富多彩的个人生活,或者是更多样化、更有趣的智力和技术生活。
在计算机类书籍不断涌现的今天,Manning出版社以两个世纪前丰富多样的地域生活为基础来制作图书封面,借此颂扬计算机行业的创造性和首创精神,而封面中Jefferys的插图也使读者对两个世纪前人们的生活产生了无尽的遐想。