gpt4 book ai didi

android - RxAndroid : when to use bindActivity and why?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:45 25 4
gpt4 key购买 nike

在像下面的 Activity 这样的情况下,真的有必要使用 AndroidObservable.bindActivity(...) 吗?因为你仍然需要在 onDestroy 中手动取消订阅。

根据 this blog帖子,bindActivity 是必要的,所以:

you don't accidentally try to change state after it is valid to do so

我读它的方式 - 意味着当您在调用 finish() 之后对 Activity 执行某些操作时可能会出现问题,因此在 onDestroy 中取消订阅为时已晚。

谁能给我一个例子,说明什么时候像在 onDestroy 中那样取消订阅实际上是一个问题?


如果你看the source对于 AndroidObservable.java,用于 bindActivity 的谓词函数是:

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

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

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

最佳答案

你不能在 onSaveInstanceState 被调用后进行 fragment 事务处理,所以如果你的订阅打开了一个 DialogFragment 然后在 onDestroy 之前但在 onSaveInstanceState 会使您的应用程序崩溃。如果 Activity 正在关闭并且网络请求完成并想要显示错误,则可能会发生这种情况。任何需要保存状态的东西都不能在 onSaveInstanceState 之后调用,这将是一个问题。

关于android - RxAndroid : when to use bindActivity and why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26344638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com