如今,人们都在谈论反应式编程,你也很好奇学习这种新的编程方式。也许你在一些地方看到过它的使用,但仍有些困惑,需要一些澄清。
在本文中,我们将学习反应式编程的基本概念。从下一篇文章开始,我们将进行一些真正的编程,并学习如何在Android应用程序开发中使用RxJava。
那么,首先让我们了解一下我们面临的问题是什么?为什么我们需要反应式编程?因为如果没有问题,我们就不需要解决方案,对吧?
为什么我们需要异步工作?
简单来说,我们想要提高用户体验。我们希望使我们的应用程序更加响应,为用户提供流畅的体验,而不会冻结主线程,减缓速度,并且不会给用户提供糟糕的性能。
为了保持主线程空闲,我们需要在后台完成许多繁重和耗时的工作。我们还希望在我们的服务器上进行繁重的工作和复杂的计算,因为移动设备没有足够的能力来完成这项繁重的工作。因此,我们需要异步工作来进行网络操作。
评估矩阵:
评估矩阵
让我们看看处理所有异步工作的库需要什么。你可以将下面的4个点想象成异步库的评估矩阵。
- **显式执行:**如果我们在新线程上开始执行一堆工作,我们应该能够控制它。如果你要执行一些后台任务,你可以收集信息并准备好它们。一旦准备好,你就可以启动后台任务。
- **简单的线程管理:**在异步工作中,线程管理是关键。我们经常需要从后台线程更新主线程上的UI,或在任务中间或任务结束时需要这样做。为此,我们需要从一个线程(后台线程)传递工作到另一个线程(这里是主线程)。因此,你应该能够轻松切换线程并在需要时将工作传递给另一个线程。
- **易于组合:**理想情况下,如果我们可以创建一个异步工作,当我们开始旋转后台线程时,它只会在没有依赖于任何其他线程(特别是UI线程)的情况下完成工作,并保持独立,直到完成工作。但在现实世界中,我们需要更新UI、进行数据库更改等等许多事情,这使得线程相互依赖。因此,异步库应该易于组合,并提供更少的出错机会。
- **最小化副作用:**在使用多个线程时,其他线程应该从其他线程中获得最小的副作用。这使得你的代码对新手易于阅读和理解,也使得错误易于追踪。
什么是反应式编程?
根据 wikipedia:
反应式编程 是围绕数据流和变化传播的编程范式。这意味着应该可以在所使用的编程语言中轻松地表达静态或动态数据流,并且底层执行模型将自动通过数据流传播更改。
简单来说,Rx编程中的数据流由一个组件发出,Rx库提供的底层结构会将这些更改传播到另一个已注册接收这些数据更改的组件。简单来说:Rx由三个关键点组成。
RX = OBSERVABLE + OBSERVER + SCHEDULERS
我们将逐一详细讨论这些点。
- Observable: Observable 就是数据流。Observable 封装了可以从一个线程传递到另一个线程的数据。它们基本上根据它们的配置周期性地或仅一次在其生命周期中发出数据。有各种运算符可以帮助观察者根据某些事件发出特定的数据,但我们将在即将到来的部分中研究它们。现在,你可以将可观察对象视为供应商。它们处理并向其他组件提供数据。
- Observers: 观察者使用 subscribeOn() 方法订阅可观察对象以接收其发出的数据流。每当可观察对象发出数据时,所有已注册的观察者都在 onNext() 回调中接收数据。在这里,它们可以执行各种操作,例如解析JSON响应或更新UI。如果可观察对象抛出错误,观察者将在 onError() 中接收到它。
- Schedulers: 记住,Rx是用于异步编程的,我们需要线程管理。这就是计划程序的作用。计划程序是Rx中告诉可观察对象和观察者应该在哪个线程上运行的组件。你可以使用 observeOn() 方法告诉观察者应该在哪个线程上观察。另外,你可以使用 scheduleOn() 告诉可观察对象应该在哪个线程上运行。RxJava 中提供了主要的默认线程,例如 Schedulers.newThread() 将创建新的后台线程。Schedulers.io() 将在IO线程上执行代码。# 使用Rx的3个简单步骤
通用的 Marble 图表
让我们看一个基本的例子,这将解释在应用程序中使用响应式编程的三个简单步骤。
第一步:创建发出数据的可观察对象:
在这里,数据库是一个可观察对象,它发出数据。在我们的例子中,它发出字符串。just() 是一个运算符。它基本上逐个发出参数中提供的数据。 (我们将在即将发布的文章中详细讨论运算符。所以,不用担心它们。)
第二步:创建消费数据的观察者:
在上面的代码片段中,观察者是一个观察者,它消费数据库可观察对象发出的数据。它处理接收到的数据并处理其中的错误。
第三步:管理并发:
在最后一步中,我们定义了我们的调度器来管理并发。subscribeOn(Schedulers.newThread()) 告诉数据库可观察对象在后台线程上运行。observeOn(AndroidSchedulers.mainThread()) 告诉观察者在主线程上运行。这是响应式编程的基本代码。
所以到现在为止,你应该能够理解我们为什么需要响应式编程,我们为什么需要它们以及如何实现它们。在即将发布的文章中,我们将学习如何详细使用RxJava及其运算符。
评论(0)