是否真的有必要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)
onSaveInstanceState您无法在调用后执行片段事务,因此如果您的订阅打开,则DialogFragment在之前onDestroy但之后执行该操作onSaveInstanceState会使您的应用程序崩溃。如果活动正在关闭并且网络请求完成并想要显示错误,则可能会发生这种情况。任何需要保存状态并且因此无法在之后调用的事情onSaveInstanceState都会是一个问题。
| 归档时间: |
|
| 查看次数: |
2352 次 |
| 最近记录: |