2016-05-13 4 views

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

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

+0

'onStop' wird auch aufgerufen, wenn die Benutzeroberfläche der Komponente nicht mehr sichtbar ist, aber auch nicht zerstört wird. – npace

+0

@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

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) { 

       } 
      });