将 Handler.post 替换为 RxJava
Replace Handler.post with RxJava
这可能是一个简单的答案,但由于我是 RxJava 的新手,所以不太确定。
我有一个Handler
用于排队Runnable
。我想在 main/UI 线程上执行某些任务,目前我有以下代码:
private val handler = Handler(Looper.getMainLooper())
handler.post {
//action on UI thread
}
//onDestroy()
handler.removeCallbacksAndMessages(null)
我想使用 RxJava 执行上述任务。请帮忙。
如果你想要 RxJava 中的等价物,那么 Completable::fromRunnable
就是你想要的 :
private val disposable = CompositeDisposable() // instance variable
// Usage
Completable.fromRunnable {
// Runnable action (should be side effect free)
}.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(
{ Log.i(TAG, "runnable completed")},
{t -> Log.e(TAG, "error", t)})
.let(disposable::add)
// onDestroy
disposable.clear()
我已经指出 Runnable
应该没有副作用,订阅者应该执行任何副作用(在这个例子中只是记录)。如果情况并非如此,并且您的可运行程序有副作用,那么 RxJava 可能不是最适合您的用例。
这可能是一个简单的答案,但由于我是 RxJava 的新手,所以不太确定。
我有一个Handler
用于排队Runnable
。我想在 main/UI 线程上执行某些任务,目前我有以下代码:
private val handler = Handler(Looper.getMainLooper())
handler.post {
//action on UI thread
}
//onDestroy()
handler.removeCallbacksAndMessages(null)
我想使用 RxJava 执行上述任务。请帮忙。
如果你想要 RxJava 中的等价物,那么 Completable::fromRunnable
就是你想要的 :
private val disposable = CompositeDisposable() // instance variable
// Usage
Completable.fromRunnable {
// Runnable action (should be side effect free)
}.subscribeOn(AndroidSchedulers.mainThread())
.subscribe(
{ Log.i(TAG, "runnable completed")},
{t -> Log.e(TAG, "error", t)})
.let(disposable::add)
// onDestroy
disposable.clear()
我已经指出 Runnable
应该没有副作用,订阅者应该执行任何副作用(在这个例子中只是记录)。如果情况并非如此,并且您的可运行程序有副作用,那么 RxJava 可能不是最适合您的用例。