2016-11-12 10 views
0

私はRxJavaを初めて、RxJava 1.2.2を使っています。私はこのように私の改造呼び出しのAsnycTaskエグゼキュータを使用します。 AsyncTask ExecutorをRxJavaHooksに置き換えるには?

public Observable<SomeObject> getSomeObject(String id) { 
    return anyService.getSomeObject(id) 
      .subscribeOn(Schedulers.from(AsyncTask.THREAD_POOL_EXECUTOR)) 
      .observeOn(AndroidSchedulers.mainThread()); 
} 

これまでのところ、私は私のテストのためにSchedulers.immediate()で任意のスケジューラを交換したい場合は、解決策はRxJavaSchedulersHook

ました。ここでは例:

RxSchedulersOverrideRule.java

しかし、私の知る限り、これはエグゼキュータからからで作成したスケジューラ()には役立ちません。また、RxJavaHooksの方が推奨されていません。 RxJavaHooks.onScheduleAction(...)を使用する必要があるようですが、これを使用して目標を達成する方法を理解するのに十分な経験はなく、どこでも解決策を見つけることができませんでした。

したがってタイトルの質問。

答えて

1

RxJavaHooksを忘れて、それを使用してください。

public class RxSchedulersOverrideRule implements TestRule { 

    @Override 
    public Statement apply(final Statement base, Description description) { 
     return new Statement() { 
      @Override 
      public void evaluate() throws Throwable { 
       RxAndroidPlugins.reset(); 
       RxAndroidPlugins.setMainThreadSchedulerHandler(scheduler -> Schedulers.trampoline()); 

       RxJavaPlugins.reset(); 
       RxJavaPlugins.setIoSchedulerHandler(scheduler -> Schedulers.trampoline()); 
       RxJavaPlugins.setComputationSchedulerHandler(scheduler -> Schedulers.trampoline()); 
       RxJavaPlugins.setNewThreadSchedulerHandler(scheduler -> Schedulers.trampoline()); 

       base.evaluate(); 

       RxAndroidPlugins.reset(); 
       RxJavaPlugins.reset(); 
      } 
     }; 
    } 
} 
関連する問題