RxJava seul thread d'arrière-plan planificateur

Je suis assez nouveau dans RxJava donc c'est probablement une question stupide. Je vais vous décrire mon scénario.

J'ai un code en cours d'exécution sur le thread d'INTERFACE utilisateur qui sera mise à jour de certaines images, mais ces images ne sont pas très importants et ils consomment un peu de ressources tout en générant donc en fait je veux générer sur un seul thread (pas le thread de l'INTERFACE utilisateur, bien sûr) et de générer un par un. Je devine que le trampoline planificateur est ce que je veux mais mon problème est que si je l'utiliser, alors il fait le travail sur le thread d'INTERFACE utilisateur et je veux le faire sur un autre thread.

Évidemment, je peux écrire mon propre thread dans lequel je peux éléments de file d'attente, puis il traite les une par une, mais j'ai pensé que peut-être RxJava aurait une solution simple pour moi?

Mon code ressemble à ceci:

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);
    }
});

Mon journal qui dit que "Sur le thread de l'interface utilisateur?" a toujours vrai. Alors, comment puis-je faire le code et toutes les tentatives ultérieures de faire la même chose exécuter sur un seul thread (pas le thread d'interface utilisateur) dans l'ordre, sans écrit un tas de code de la file d'attente de ce que le travail?

Edit:

Je crois que cela peut maintenant être réalisé à l'aide de Schedulers.single() ou si vous voulez votre propre vous pouvez utiliser new SingleScheduler(). Je suis encore en test, mais je pense que c'est ce que je voulais quand j'ai posté cette.

reactivex.io/documentation/operators/subscribeon.html github.com/ReactiveX/RxAndroid
Je suis déjà en utilisant RxAndroid et mon code montre que je suis en utilisant subscribeOn. Je ne sais pas ce qu'à passer à subscribeOn à faire ce que je veux.
Vous devez vous abonner à un thread d'arrière-plan Scheduler (la Schedulers classe contient statique de l'usine de méthodes pour la création d'eux). Ensuite, vous avez besoin d'observer, sur un thread principal Scheduler, ce qui peut être fait l'acquisition en RxAndroid via le AndroidSchedulers.mainThread() méthode.
Je le conçois, mais qui Scheduler va me donner un thread d'arrière-plan qui va continuer à réutilisée de travail tout comme le trampoline planificateur?
Vous pouvez créer un ThreadPoolExecuter avec une piscine de taille 1 (Executors.newSingleThreadExecutor()), puis l'utiliser pour générer les planificateurs via le Schedulers.from() méthode. Alternativement, vous pouvez créer un personnalisé Thread avec un Looper en cours d'exécution (par exemple,HandlerThread), et passer un Handler cours d'exécution sur la Looper à la AndroidSchedulers.handlerThread() méthode pour obtenir un Scheduler qui va fonctionner sur ce thread.

OriginalL'auteur casolorz | 2015-04-17