J’utilise un object ReplaySubject RxJava dans mon fragment.
Je tente d’utiliser le ReplaySubject d’une manière, où je voudrais que le Sujet exécute un processus jusqu’à la fin (éventuellement au-delà de la durée de vie du fragment).
A l’issue du processus, je souhaiterais libérer les ressources qui, comme je le comprends, se désabonnent de l’abonnement au moment de l’enregistrement de l’observateur (qui, dans mon cas, est le sujet lui-même).
Dans ce problème de github, le thread @benjchristensen dit:
Si c’est un observable, alors il devrait émettre un onCompleted et être fait.
S’il s’agit d’un observateur, il doit se désabonner de l’abonnement qu’il a reçu lorsqu’il a appelé Observable.subscribe et cela donnera à l’observable une chance de s’arrêter et de nettoyer.
Si c’est un sujet -qui est à la fois un observateur et un observable- quel est le comportement? Si j’appelle onComplete sur le sujet, cela signifie-t-il que l’abonnement est arrêté, et je suis donc soulagé de devoir désabonner manuellement l’abonnement que je reçois en enregistrant l’observateur?
Les sujets sont une couche relativement mince au-dessus d’une observable qui vous permet d’alimenter les onNext()
, onCompleted()
et onError()
partir d’une source externe à l’observable. Leur comportement de désabonnement est identique à un observable. Si onCompleted()
ou onError()
sont appelés sur l’object, les abonnés seront désabonnés. Pas besoin d’appeler unsubscribe()
sur l’abonnement retourné par Observable.subscribe()
.
Pour un object ReplaySubject
, notez que les ressources ne seront pas nettoyées tant qu’elles ne seront pas nettoyées. Même si onCompleted()
a été appelé sur un object ReplaySubject
, un abonné peut toujours s’abonner et il recevra tous les onNext()
, onCompleted()
ou onError()
effectués avant l’abonnement.