私はRxJavaにかなり慣れていないので、これはおそらくばかげた質問です。私のシナリオを説明します。
一部の画像を更新するUIスレッドで実行されているコードがありますが、それらの画像はそれほど重要ではなく、生成中に少しリソースを消費するため、単一のスレッド(もちろんUIスレッドではありません)で生成したいと思います。それらを1つずつ生成します。私はトランポリンスケジューラが私が望むものだと推測していますが、私の問題は、それを使用するとUIスレッドで動作し、別のスレッドで実行したいということです。
明らかに、アイテムをキューに入れることができる独自のスレッドを作成して、それらを1つずつ処理できますが、RxJavaには簡単な解決策があると思いましたか?
私の現在のコードは次のようになります。
Observable<Bitmap> getImage = Observable.create(new Observable.OnSubscribe<Bitmap>() {
@Override public void call(Subscriber<? super Bitmap> subscriber) {
Log.w(TAG,"On ui thread? "+ UIUtils.isRunningOnUIThread());
subscriber.onNext(doComplexTaskToGetImage());
subscriber.onCompleted();
}
});
getImage.subscribeOn(Schedulers.trampoline()).subscribe(new Action1<Bitmap>() {
@Override public void call(Bitmap bitmap) {
codeToSetTheBitmap(bitmap);
}
});
「UIスレッドで?」という私のログ 常に真です。では、そのコードと、同じことを実行しようとする後続のすべての試みを単一のスレッド (UI スレッドではなく) で実行して、その作業をキューに入れるための大量のコードを作成する必要がないようにするにはどうすればよいでしょうか?
編集:
これは、を使用して達成できるSchedulers.single()
と思います。または、独自のものを使用したい場合は、を使用できますnew SingleScheduler()
。私はまだテスト中ですが、これを投稿したときに望んでいたことをしていると思います。