这是我第一次在反应范式世界中开发,我开始使用 rxjava2/rxandroid2,根据我看过的视频和我读过的文章,从 2 开始似乎更好,因为 1 有很多变化图书馆在很大程度上有所不同,但现在我在寻找类似的东西时遇到了一些麻烦
unsubscribe()
前rxjava/rxandroid库的方法
我的目标很简单
- 执行 API 调用(网络操作)
- 聆听并响应 observable 将发出的内容(快乐路径)
- 当应用程序进入暂停状态时不要听或反应
- 或者,一旦 android 进入暂停生命周期,就取消订阅 observable
,根据周围的资源有
dispose()
rx2 的方法,我对此的理解是它处理任何当前资源(在我的情况下,根据我的理解,调用它会使 observable 将自身分离到任何观察者)。
但这似乎不是我所期望的,请查看 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();
}
}
我有这个输出:
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.
我期待 onNext 将不再被调用,或者可能不会同时调用 onNext 和 onComplete,但这似乎不起作用,我在这里遗漏了什么吗?或者有一些我完全不明白的东西,我对我的代码的想法是,
“如果 onNext 正在对小部件(UI)(观察者)执行某些操作并且应用程序进入暂停状态怎么办?”,我不希望那个 UI(观察者)再对那个特定的 UI 做出反应。
很多人是对的,我承认,切换到响应式编程非常困难,尤其是 rxjava2/rxandroid2 的学习曲线非常陡峭。
任何帮助将不胜感激。