RxAndroid:什么时候使用bindActivity?为什么?

Jaa*_*tum 5 android rx-java

是否真的有必要AndroidObservable.bindActivity(...)在下面的活动中使用?因为您仍然需要手动取消订阅onDestroy.

根据这篇博文,bindActivity是必要的,所以:

在有效的情况下,你不小心尝试改变状态

哪个 - 我读它的方式 - 意味着当你在finish()调用之后用活动做某些事情时会出现问题,因此在onDestroy中取消订阅会为时已晚.

任何人都可以给我一个例子,说明何时在onDestroy中取消订阅实际上是一个问题?


如果你看一下AndroidObservable.java用于bindActivity谓词函数为:

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

检查配置更改不是更好,例如:

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

???


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) {}
}
Run Code Online (Sandbox Code Playgroud)

Dyl*_*lan 4

onSaveInstanceState您无法在调用后执行片段事务,因此如果您的订阅打开,则DialogFragment在之前onDestroy但之后执行该操作onSaveInstanceState会使您的应用程序崩溃。如果活动正在关闭并且网络请求完成并想要显示错误,则可能会发生这种情况。任何需要保存状态并且因此无法在之后调用的事情onSaveInstanceState都会是一个问题。