RxJava Observable在异步调用中创建的替代方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了RxJava Observable在异步调用中创建的替代方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2012字,纯文字阅读大概需要3分钟。
内容图文
我听了这个演讲
https://www.youtube.com/watch?v=QdmkXL7XikQ&feature=youtu.be&t=274
并且我应该避免使用create方法创建一个Observable,因为它不能自动处理unsubscription和backpressure,但我找不到在下面的代码中使用的替代方法.
compositeSubscription.add(
Observable.create(new Observable.OnSubscribe<DTOCompaniesCallback>() {
@Override
public void call(final Subscriber<? super DTOCompaniesCallback> subscriber) {
modelTrainStrike.getCompaniesFromServer(new CompaniesCallback() {
@Override
public void onResult(DTOCompaniesCallback dtoCompaniesCallback) {
try {
if (!subscriber.isUnsubscribed()) {
subscriber.onNext(dtoCompaniesCallback);
subscriber.onCompleted();
}
} catch (Exception e) {
if (!subscriber.isUnsubscribed()) {
subscriber.onError(e);
}
}
}
});
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<DTOCompaniesCallback>() {
@Override
public void call(DTOCompaniesCallback dtoCompaniesCallback) {
Log.i("TAG", "onResult: " + dtoCompaniesCallback.getCompaniesList().size());
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
throw new one rrorNotImplementedException("Source!", throwable);
}
})
);
我打电话给OnDestroy方法清除CompositeSubscription
@Override
public void onDestroy() {
if (compositeSubscription != null) {
compositeSubscription.clear();
}
}
你看到我可以在这里使用的create方法的替代方法吗?
您是否看到任何潜在的危险或这种方法是否安全?
谢谢
解决方法:
您可以使用延迟AsyncSubject:
Observable.defer(() -> {
AsyncSubject<DTOCompaniesCallback> async = AsyncSubject.create();
modelTrainStrike.getCompaniesFromServer(v -> {
async.onNext(v);
async.onComplete();
});
return async;
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
...
如果getCompaniesFromServer支持取消,您可以:
Observable.defer(() -> {
AsyncSubject<DTOCompaniesCallback> async = AsyncSubject.create();
Closeable c = modelTrainStrike.getCompaniesFromServer(v -> {
async.onNext(v);
async.onComplete();
});
return async.doOnUnsubscribe(() -> {
try { c.close(); } catch (IOException ex) { }
});
})
内容总结
以上是互联网集市为您收集整理的RxJava Observable在异步调用中创建的替代方法全部内容,希望文章能够帮你解决RxJava Observable在异步调用中创建的替代方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。