Ich habe Abonnenten, die mit UI-Komponenten einer Aktivität/eines Fragments interagieren. Ich bin mir nicht sicher, wo und wann ich sie abmelden sollte. Ich sehe zwei Möglichkeiten: Ersteres ist es, sie in der onPause() Methode abzubestellen, letzteres ist, sie in der onStop() Methode abzubestellen. Welcher ist richtig und warum? DankeWann sollte ich mich von Observablen in Aktivitäten und Fragmenten abmelden, um negative Konsequenzen zu vermeiden?
0
A
Antwort
0
Sie sollten verwenden, da Sie den Listener nicht ausführen müssen, während die Aktivität oder das Fragment nicht ausgeführt wird. wird jedes Mal aufgerufen, wenn das Element nicht mehr aktiv ist. onStop
wird auf dem Weg zur Zerstörung genannt.
0
„Aber was, wenn mein beobachtbaren Downloads einige Inhalte nach der Aktivität beginnt“ Für Langzeitbetrieb oder Operationen, die von Activity Lifecycle unabhängig sein müssen Sie Service Komponente
0
Bitte werfen Sie einen Blick auf diese https://github.com/trello/RxLifecycle verwenden shuold . Dadurch wird verhindert, dass Ihre App NPE auf Sichten und Kontextspeicherlecks wirft. Lesen Sie über MVP-Muster. Im Folgenden habe ich beispielhafte Implementierung
Presenter Klasse
public class SamplePresenter {
@NonNull
private final Observable<SomeData> someDataObservable;
public SamplePresenter(@NonNull ApiService apiService) {
someDataObservable = apiService.apiRequest()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io());
}
@NonNull
public Observable<SomeData> getSomeDataObservable() {
return someDataObservable;
}
}
MainActivity Klasse
@Inject
SamplePresenter samplePresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
samplePresenter.getSomeDataObservable()
.compose(this.<SomeData>bindToLifecycle())
.subscribe(new Action1<SomeData>() {
@Override
public void call(SomeData someData) {
}
});
Danke für die Antwort. Aber wenn mein Observable einige Inhalte nach dem Start der Aktivität herunterlädt, werde ich den Inhalt verlieren, wenn ich eine SMS in einem Popup-Fenster bekomme oder jemand mich anruft. Und ich werde den Inhalt erneut herunterladen müssen – Buckstabue
'onStop' wird auch aufgerufen, wenn die Benutzeroberfläche der Komponente nicht mehr sichtbar ist, aber auch nicht zerstört wird. – npace
@Buckstabue - klingt so, als benötigst du eine Presenter-Komponente, die nicht zerstört wird, wenn verschiedene Instanzen deiner 'Aktivität' zerstört werden. – npace