📜  了解 RxJava 定时器、延迟和间隔运算符

📅  最后修改于: 2022-05-13 01:54:49.519000             🧑  作者: Mango

了解 RxJava 定时器、延迟和间隔运算符

我们将在这篇文章中了解 RxJava 定时器、延迟和间隔运算符。此外,本文将阐明所有不同 Timer、Delays 和 Interval Operators 的用例,因此请保持关注直到最后。通过示例,我们将研究以下所有操作。

  • 计时器
  • 延误
  • 间隔

让我们从 RxJava Timer Operator 开始。当我们想在一定时间后做某事时使用 Timer运算符。

定时器运算符示例

Kotlin
Observable.timer(5, TimeUnit.SECONDS)
    .flatMap {
        return@flatMap Observable.create { shooter ->
            Log.d("gfgArticleExampe", "Shoot")
            shooter.onNext("GeeksforGeeks")
            shooter.onComplete()
            // Action to be done when completed 10 secs
        }
    }
    .subscribeOn(Schedulers.io())
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe {
        Log.d("gfgArticleExampe", it)
}


Kotlin
Observable.create { emitter ->
    Log.d("DelayGFG", "Shoot")
    emitter.onNext("GeeksforGeeks")
    emitter.onComplete()
}
.subscribeOn(Schedulers.io())
.delay(10, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
    Log.d("DelayGFG", it)
}


Kotlin
val disposable =
    Observable.interval(1, 10, TimeUnit.SECONDS)
        .flatMap {
            return@flatMap Observable.create { shooter ->
                Log.d("GfGInterval", "Shoot")
                shooter.onNext("GeeksforGeeks")
                shooter.onComplete()
            }
        }
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe {
            Log.d("GfGInterval", it)
        }
compositeDisposable.add(disposable)


上面的例子向我们展示了我们所说的计时器运算符。当我们将 10 秒传递给 Timer运算符,它将以这种方式移动到另一个任务,我们在 10 秒内完成任务并发出值“GeeksforGeeks”。

现在,让我们看看RxJava 延迟运算符。延迟算子将来自 Observable 的排放提前指定的数量。让我们看一个 Delay运算符的例子。

延迟运算符示例

科特林

Observable.create { emitter ->
    Log.d("DelayGFG", "Shoot")
    emitter.onNext("GeeksforGeeks")
    emitter.onComplete()
}
.subscribeOn(Schedulers.io())
.delay(10, TimeUnit.SECONDS)
.observeOn(AndroidSchedulers.mainThread())
.subscribe {
    Log.d("DelayGFG", it)
}

我们正在做一些工作,然后发出一个值,但我们想将值的发送推迟到订阅者,因此我们使用了延迟运算符。

让我们来看看 RxJava 间隔运算符,它生成一个 Observable,它发出由时间间隔分隔的整数序列。

区间运算符示例

科特林

val disposable =
    Observable.interval(1, 10, TimeUnit.SECONDS)
        .flatMap {
            return@flatMap Observable.create { shooter ->
                Log.d("GfGInterval", "Shoot")
                shooter.onNext("GeeksforGeeks")
                shooter.onComplete()
            }
        }
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe {
            Log.d("GfGInterval", it)
        }
compositeDisposable.add(disposable)

在这种情况下,任务将在 10 秒延迟后重复。要记住的一件事:它将无限期地继续下去。

那么如何摆脱这个循环呢?

那么,有两种方法可以停止:

  • 使用compositeDisposable。
  • dispose()可以使用 take(n)运算符调用。

结论

当我们有一个用例时,我们希望以特定的时间间隔重复一项工作,我们可以使用间隔运算符。要记住的另一件事是所有 Timer、Delay 和 Interval Operators 都在调度程序线程上运行,因此我们不必担心它。为了解决这个有趣的问题,我们可能会使用 RxJava 定时器、延迟和间隔运算符。

想要一个更快节奏和更具竞争力的环境来学习 Android 的基础知识吗?
单击此处前往由我们的专家精心策划的指南,旨在让您立即做好行业准备!