2

データベース オブジェクトへの参照を保持するシングルトンがあります。私がやりたいことは、データベース操作を単一の IO スレッドに制限することです。

まず、次のことを試しました。

class SQLSingleton{

 ...

 public Observable<MyObject> query(final String id){

   return Observable.fromCallable(() -> {

       //database operations here
   })
   .subscribeOn(Schedulers.io())
   .observeOn(AndroidSchedulers.mainThread());
 }

 ...
}

このアプローチの問題は、Schedulers.io() が、上記のオブザーバブルをサブスクライブするサブスクライバーごとにプールから異なるスレッドを提供する可能性があることです (それは望ましくありません。コードを同じスレッドで実行したいのです)。常に)。

次に、スケジューラを自分で保持するアプローチに移りました。

class SQLSingleton{

 private final Scheduler schedulerIODatabase;

 public SQLSingleton(){
      schedulerIODatabase = Schedulers.newThread();
 }

 public Observable<MyObject> query(final String id){

   return Observable.fromCallable(() -> {

       //database operations here
   })
   .subscribeOn(schedulerIODatabase)
   .observeOn(AndroidSchedulers.mainThread());
 }

 ...
}

私はRxJavaを初めて使用するので(そして、多くの落とし穴があるようです)、質問します.Schedulerオブジェクトを存続させておくことに害はありますか(SQLSingletonはシングルトンであるため、Schedulerもそうなることに注意してください)?

4

1 に答える 1