2014-10-13 17 views
5

Aşağıdaki etkinlik gibi durumlarda AndroidObservable.bindActivity(...) kullanmak gerçekten gerekli midir? Yine de manuel olarak onDestroy'dan yine de aboneliğinizi iptal etmeniz gerekiyor.RxAndroid: bindActivity ne zaman kullanılır ve neden?

this blog mesaja göre, bindActivity gerekli böyledir: kadar

yapmak geçerlidir sonra

yanlışlıkla durumunu değiştirme kalkma hangi Okuduğum -the yolu Bu, finish() den sonra aktivite ile ilgili bazı şeyleri yaptığınızda sorunlar olabileceği anlamına gelir ve böylece onDestroy'da üyelikten çıkmak çok geç olur.

OnDestroy'da olduğu gibi abonelikten çıkmanın gerçekten bir sorun olması durumunda bana bir örnek verebilir misiniz? Eğer AndroidObservable.java için the source bakarsak


bindActivity için kullanılan yüklem fonksiyonudur:

private static final Func1<Activity, Boolean> ACTIVITY_VALIDATOR = new Func1<Activity, Boolean>() { 
@Override public Boolean call(Activity activity) { 
     return !activity.isFinishing() && !activity.isChangingConfigurations(); 
    } 
}; 
:

private static final Func1<Activity, Boolean> ACTIVITY_VALIDATOR = new Func1<Activity, Boolean>() { 
@Override public Boolean call(Activity activity) { 
     return !activity.isFinishing(); 
    } 
}; 

aynı zamanda gibi yapılandırma değişiklikleri kontrol etmek daha iyi olmaz

???


onSaveInstanceState çağrıldıktan sonra senin bir DialogFragment sonra onDestroy önce ama onSaveInstanceState sonra uygulamanın çökmesine neden oluyordu yapıyor açılır abone eğer, böylece parça işlemleri yapamaz

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

cevap

4

SomeActivity.java. Bu, Etkinlik kapanıyorsa ve bir hata görüntülemek isteyen bir ağ isteği sona eriyorsa gerçekleşebilir. Kaydetme durumunu gerektiren ve dolayısıyla onSaveInstanceState'dan sonra çağrı yapılamayan bir sorun olurdu.

+0

Net cevap! Teşekkürler. –

+0

Belki de artık etrafta değilsiniz, ancak DialogFragments'ı sade Diyaloglar yerine kullanmanın bir nedeni var mı? Bu hataya birçok kez karşı karşıya geldim ve bu noktada vazgeçtim ve kullanımdan kaldırılanlara geri döndüm. –

+0

@ MLProgrammer-CiM DialogFragment', etkinliğe bağlı "Dialog" yerine bir Fragman yaşam döngüsüne sahiptir. Basit "Dialog" un aksine rotasyondan kolayca kurtulabilirler. – GDanger

İlgili konular