将 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 可能不是最适合您的用例。