データベース オブジェクトへの参照を保持するシングルトンがあります。私がやりたいことは、データベース操作を単一の 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もそうなることに注意してください)?