Rx java 如何覆盖Schedulers.io()?

Rx java 如何覆盖Schedulers.io()?,rx-java,rx-android,Rx Java,Rx Android,我需要在速度非常慢的设备上模拟应用程序的行为。所以我想重写Schedulers.io(),只使用一个低优先级的线程。并且,如果可能的话,在将任务放入队列之前增加一些延迟。有没有什么办法可以在不改变时间表的情况下全局执行一次。io()调用代码 您可以通过调度程序包装单线程执行器。从(executor)开始,然后用另一个程序包装生成的调度程序: ExecutorService exec = Executors.newSingleThreadExecutor(); final Scheduler sc

我需要在速度非常慢的设备上模拟应用程序的行为。所以我想重写Schedulers.io(),只使用一个低优先级的线程。并且,如果可能的话,在将任务放入队列之前增加一些延迟。有没有什么办法可以在不改变时间表的情况下全局执行一次。io()调用代码

您可以通过
调度程序包装单线程执行器。从(executor)
开始,然后用另一个程序包装生成的
调度程序

ExecutorService exec = Executors.newSingleThreadExecutor();
final Scheduler sch = Schedulers.from(exec);
final long delayMillis = 1000;

Scheduler newScheduler = new Scheduler() {
    @Override public Worker createWorker() {
        return new NewWorker(sch.createWorker());
    }

    class NewWorker extends Scheduler.Worker {
        final Worker actual;

        NewWorker(Worker actual) {
            this.actual = actual;
        }

        @Override public void unsubscribe() {
            actual.unsubscribe();
        }

        @Override public boolean isUnsubscribed() {
           return actual.isUnsubscribed();
        }

        @Override public Subscription schedule(Action0 action) {
            return actual.schedule(action, delayMillis, TimeUnit.MILLISECONDS);
        }

        @Override public Subscription schedule(Action0 action, long delayTime,
               TimeUnit unit) {
            return actual.schedule(action, delayTime, unit);
        }
    }
};

RxJavaHooks.setOnIOScheduler(original -> newScheduler);

Observable.just(1)
.observeOn(Schedulers.io())
.toBlocking()
.subscribe(System.out::println);
完成后,不要忘记关闭ExecutorService并重置挂钩:

exec.shutdown();
RxJavaHooks.setOnIOScheduler(null);