问题描述
使用调度程序进行测试的RxJava规则为
import io.reactivex.Scheduler
import io.reactivex.android.plugins.RxAndroidplugins
import io.reactivex.internal.schedulers.ExecutorScheduler
import io.reactivex.plugins.RxJavaPlugins
import org.junit.rules.TestRule
import org.junit.runner.Description
import org.junit.runners.model.Statement
import java.util.concurrent.Executor
class RxImmediateSchedulerRule : TestRule {
private val immediate = object : Scheduler() {
override fun createWorker(): Worker {
return ExecutorScheduler.ExecutorWorker(Executor { it.run() },true)
}
}
// private val immediate = Schedulers.trampoline()
override fun apply(base: Statement,description: Description): Statement {
return object : Statement() {
@Throws(Throwable::class)
override fun evaluate() {
RxJavaPlugins.setinitIoSchedulerHandler { immediate }
RxJavaPlugins.setinitcomputationSchedulerHandler { immediate }
RxJavaPlugins.setinitNewThreadSchedulerHandler { immediate }
RxJavaPlugins.setinitSingleSchedulerHandler { immediate }
RxAndroidplugins.setinitMainThreadSchedulerHandler { immediate }
try {
base.evaluate()
} finally {
RxJavaPlugins.reset()
RxAndroidplugins.reset()
}
}
}
}
}
现在有了RxJava3
ExecutorScheduler.ExecutorWorker(Executor { it.run() },true,true)
此处的第二个参数称为fair
,但ExecutorScheduler
类中没有JavaDoc或对此参数的解释。谁是合理的参数,何时应该使用?
解决方法
在ExecutorScheduler类中没有JavaDoc或对此参数的解释
那是因为ExecutorScheduler
是一个内部类,不能直接使用。
在Schedulers.from()
的JavaDoc中解释了公平性。