Rob*_*ert 1 android dispose unsubscribe rx-android rx-java2
这是我第一次在反应范式世界中开发,我开始使用rxjava2/rxandroid2,基于我观看过的视频和我读过的文章,从2开始看起来更好,因为有很多变化,图书馆的大规模存在差异,但现在我在寻找像这样的东西时遇到了一些麻烦
unsubscribe()
Run Code Online (Sandbox Code Playgroud)
以前的rxjava/rxandroid库的方法
我的目标很简单
,基于周围的资源
dispose()
Run Code Online (Sandbox Code Playgroud)
rx2的方法,我对此的理解是它处理任何当前资源(在我的情况下,基于我理解的,调用它将使可观察的自身分离给任何观察者).
但这似乎不是我所期待的,请看一下ff代码:
public class MainActivity extends AppCompatActivity {
final Disposable disposable = new Disposable() {
@Override
public void dispose() {
Log.e("Disposed", "_ dispose called.");
}
@Override
public boolean isDisposed() {
return true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observer<Object> observer = new Observer<Object>() {
@Override
public void onSubscribe(Disposable d) {
Log.e("OnSubscribe", "On Subscribed Called");
}
@Override
public void onNext(Object value) {
Log.e("onNext", "Actual Value (On Next Called).");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
@Override
public void onComplete() {
Log.e("OnComplete", "On Complete Called.");
}
};
EventsApiService.getInstance().testApi().testCall()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnDispose(new Action() {
@Override
public void run() throws Exception {
Log.e("Disposed?", "__ Dispose");
}
})
.subscribe(observer);
observer.onSubscribe(disposable);
}
@Override
public void onPause() {
super.onPause();
disposable.dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个输出:
03-23 09:08:05.979 3938-3938/edu.rx.study E/Disposed: _ dispose called.
03-23 09:08:13.544 3938-3938/edu.rx.study E/onNext: Actual Value (On Next Called).
03-23 09:08:13.544 3938-3938/edu.rx.study E/OnComplete: On Complete Called.
Run Code Online (Sandbox Code Playgroud)
我期待onNext不再被调用或者可能同时调用onNext和onComplete,但这似乎不起作用,我在这里错过了一些东西吗?或者我完全不理解的东西,我的代码思考是,
"如果onNext对某个小部件(UI)执行某些操作(Observer)并且应用程序处于暂停状态会怎样?",我不希望该UI(Observer)对该特定UI做出反应.
很多人都是对的,我承认,切换到反应式编程非常困难,尤其是rxjava2/rxandroid2的学习曲线非常陡峭.
任何帮助将不胜感激.
你错误地处理了Observer与Disposable中,Disposable对象应该由可观测来递给你,你不能仅仅通过自己创建它,并明确调用Observer.onSubscribe()它,因为它没有连接Observable,并且不终止它.(你也可以注意到它Observer.onSubscribe被调用了两次,Observable一个被你调用,一个被你调用)
你应该做的只是使用onSubscribe(Disposable d)你的方法Observer来保存Disposable,它将由Observable你自动调用并将提供正确的Disposable对象,你可以用它成功终止网络操作.
另一个选择是,不要使用所有的订阅(Observer o)方法,而是使用onNext/onError/onCompleted作为参数的其他重载,并返回Disposable对象,您可以使用它来处理(取消订阅),以终止网络调用.
| 归档时间: |
|
| 查看次数: |
2841 次 |
| 最近记录: |