适用于 Android 的 RxJava
RxJava 是一个 JVM 库,它使用可观察序列来执行异步和基于事件的编程。它的主要构建块是三个 O,代表 Operator、Observer 和 Observables。我们使用它们来完成我们项目中的异步任务。它极大地简化了我们项目中的多线程。它帮助我们确定要在哪个线程上运行任务。
GeekTip: RxJava, on the other hand, is designed primarily for Java projects. RxAndroid is required to use RxJava in Android.
RxAndroid 到底是什么?
RxAndroid 是一个 RxJava for Android 扩展,仅用于 Android 应用程序。 RxAndroid 添加了 Android 所需的主线程。我们将需要 Looper 和 Handler 来执行主线程,以便在 Android 中使用多线程。
Note: AndroidSchedulers are provided by RxAndroid.
mainThread()返回一个调度程序,它有助于在主 UI 线程上执行任务,主要用于 Android 项目。所以,这里我们有 AndroidScheduler。 mainThread() 用于访问应用程序的主线程,以便我们可以执行更新 UI 等操作。因为从技术上讲,从后台线程更新 UI 在 Android 中是不可能的,所以我们可以使用 AndroidSchedulers.mainThread() 来更新主线程上的任何内容。在内部,它利用 Handler 和 Looper 概念在主线程上执行操作。
GeekTip: RxAndroid compiles and uses RxJava internally. However, while using RxAndroid in our project, we still include the RxJava dependency to work with, such as
implementation ‘io.reactivex.rxjava3:rxjava:2.5.0’
implementation ‘io.reactivex.rxjava3:rxandroid:3.0.0’
原因是 RxAndroid 可能没有项目中使用的最新版本的 RxJava。因此,我们使用 RxJava 依赖来覆盖 RxAndroid 使用的内部 RxJava 版本的版本控制。
这个的实际使用
RxJava 利用了运算符的力量,正如谚语所说,“RxJava 几乎所有东西都有一个运算符。”
示例 #1:
考虑以下场景:我们想要进行 API 调用并将结果保存到某个存储/文件中。这将是一个长时间运行的任务,在主线程上执行一个长时间运行的任务可能会导致意外行为,例如 App Not Responding。因此,要完成上述任务,我们可能会考虑使用 AsyncTask 作为我们的首选解决方案。但是,在 Android R 中,AsyncTask 将被弃用,而 RxJava 等库将成为解决方案。使用 RxJava 代替 AsyncTask 可以让我们编写更少的代码。它改进了代码管理,因为 AsyncTask 会使代码变得冗长且难以管理。
示例 #2:
考虑一个场景,我们想从一个 API 中检索用户详细信息,然后使用从之前的 API 中获取的用户 ID,我们调用另一个 API 来检索用户的好友列表。在使用 AsyncTask 时,我们可能需要使用多个 AsyncTask 并以一种允许我们组合所有 AsyncTask 并将结果作为单个响应返回的方式来管理结果。
示例#3:
考虑以下场景:我们进行 API 调用以获取用户列表,并且我们只想要与给定当前条件匹配的数据。一种通用的方法是进行 API 调用,然后从 Collection 中根据条件过滤特定用户的内容并返回数据。但是,使用 RxJava,我们可以在返回 API 响应的同时通过 filter运算符直接过滤掉数据,而这一切都是在管理线程的同时完成的。
结论
这些是用于 Android 用例的 RxJava 的一些示例,以及我们在项目中需要 RxAndroid 的原因。在 geeks for Geeks 上还有其他文章链接到其他 Rx Java方法,您可以在此处找到。