public class DataManagerTest {
private Context mContext;
private String TAG = DataManagerTest.class.getSimpleName();
@Before
public void setUp() throws Exception {
mContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
initRX();
}
private void initRX() {
//这里是核心 需要把项目中使用io 、computation调度转换为trampoline
RxJavaPlugins.reset();
RxJavaPlugins.setIoSchedulerHandler(new Function<Scheduler, Scheduler>() {
@Override
public Scheduler apply(@NonNull Scheduler scheduler) throws Exception {
return Schedulers.trampoline();
}
});
RxAndroidPlugins.reset();
RxAndroidPlugins.setMainThreadSchedulerHandler(new Function<Scheduler, Scheduler>() {
@Override
public Scheduler apply(@NonNull Scheduler scheduler) throws Exception {
return Schedulers.trampoline();
}
});
RxAndroidPlugins.reset();
RxJavaPlugins.setComputationSchedulerHandler(new Function<Scheduler, Scheduler>() {
@Override
public Scheduler apply(@NonNull Scheduler scheduler) throws Exception {
return Schedulers.trampoline();
}
});
}
RxJava调度程序的简要介绍。
-
Schedulers.io() –用于执行非CPU密集型操作,例如进行网络调用,读取磁盘/文件,数据库操作等。此操作维护一个池线程数。
-
Schedulers.newThread() –使用此功能,每次计划任务时都会创建一个新线程。通常建议不要使用调度程序,除非运行时间很长。通过newThread()创建的线程将不会被重复使用。
-
Schedulers.computation() –此计划表可用于执行CPU密集型操作,例如处理大量数据,位图处理等。使用此计划程序创建的线程数完全取决于可用的CPU内核数量。
-
Schedulers.single() –此调度程序将按添加任务的顺序执行所有任务。当需要顺序执行时可以使用它。
-
Schedulers.immediate() –该调度程序通过阻塞主线程以同步方式立即执行任务。
-
Schedulers.trampoline()–以先进先出的方式执行任务。通过将后台线程数限制为一个,所有调度的任务将一一执行。
-
Schedulers.from() –通过限制要创建的线程数,这使我们可以从执行程序创建调度程序。当线程池被占用时,任务将排队。
然后就可以在@test 方法下 调用自己项目中的网络请求方法 测试是否跑通链路。
网友评论