È davvero necessario utilizzare AndroidObservable.bindActivity(...)
in casi come l'attività seguente? Poiché è comunque necessario annullare l'iscrizione manualmente in onDestroy
.RxAndroid: quando utilizzare bindActivity e perché?
Secondo this blog inviati, bindActivity è necessaria perché:
non si tenta accidentalmente di modificare lo stato dopo che è valida per farlo
che -la modo ho letto significherebbe che potrebbero esserci problemi quando si fanno determinate cose con l'attività dopo che è stato chiamato finish()
e quindi l'annullamento dell'iscrizione in onDestroy sarebbe troppo tardi.
Qualcuno può darmi un esempio di quando annullare l'iscrizione fino a tardi su onDestroy sarebbe effettivamente un problema?
Se si guarda alla the source per AndroidObservable.java
la funzione predicato utilizzato per bindActivity è:
private static final Func1<Activity, Boolean> ACTIVITY_VALIDATOR = new Func1<Activity, Boolean>() {
@Override public Boolean call(Activity activity) {
return !activity.isFinishing();
}
};
Non sarebbe meglio controllare anche per le modifiche di configurazione, come:
private static final Func1<Activity, Boolean> ACTIVITY_VALIDATOR = new Func1<Activity, Boolean>() {
@Override public Boolean call(Activity activity) {
return !activity.isFinishing() && !activity.isChangingConfigurations();
}
};
???
SomeActivity.java
public class SomeActivity extends Activity implements Observer<String> {
private Subscription subscription;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
subscription = getObservable().observeOn(AndroidSchedulers.mainThread()).subscribe(this);
// or use bindActivity here????
// subscription = AndroidObservable.bindActivity(this, getObservable()).subscribe(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
subscription.unsubscribe();
}
@Override
public void onNext(String s) {
// do something with the activity state...
}
@Override public void onCompleted() {}
@Override public void onError(Throwable throwable) {}
}
Risposta chiara! Grazie. –
Forse non sei più in giro, ma c'è qualche ragione per usare DialogFragments invece di semplici Dialogs? Mi sono opposto a questo errore molte volte e a questo punto mi sono arreso e sono tornato a quelli deprecati. –
@ MLProgrammer-CiM 'DialogFragment' ha un ciclo di vita di Fragment invece di' Dialog' che è legato all'attività. Possono facilmente sopravvivere alla rotazione, a differenza del semplice 'Dialog'. – GDanger