Android RxJava2允许在片段/活动更改时完成网络调用
我有一系列连续的解析网络调用,它们相互依赖,以保存最终的对象,所有对象都由一个可观察对象包装,这样我就可以在演示器中作为一个调用来处理所有事情 如果用户决定更改片段,或离开应用程序或其他什么,这个网络呼叫非常重要,我希望它能够尝试完成 如果我调用disposables.dispose(),observable将在observable中的next.save方法上抛出一个错误(我可以捕捉到),并且网络调用不会完成 如果我不处理它,网络调用将完成,但它将调用我的onComplete并抛出一个错误,因为视图已消失。我可以阻止错误的发生,但是我担心我已经造成了内存泄漏 如果用户遇到这种情况,我不在乎oncomplete/onerror是否会被调用,但我希望确保它以某种方式完成 有没有办法让调用完成,但不通过不处理它而导致内存泄漏Android RxJava2允许在片段/活动更改时完成网络调用,android,rx-java2,Android,Rx Java2,我有一系列连续的解析网络调用,它们相互依赖,以保存最终的对象,所有对象都由一个可观察对象包装,这样我就可以在演示器中作为一个调用来处理所有事情 如果用户决定更改片段,或离开应用程序或其他什么,这个网络呼叫非常重要,我希望它能够尝试完成 如果我调用disposables.dispose(),observable将在observable中的next.save方法上抛出一个错误(我可以捕捉到),并且网络调用不会完成 如果我不处理它,网络调用将完成,但它将调用我的onComplete并抛出一个错误,因为
fun doParseNetworkCall(){
return Observable.create<Boolean> { emitter ->
createParseObject1
createParseObject1.save()
createParseObject2
createParseObject2.add(key, createParseObject1)
createParseObject2.save()
createParseObject3
createParseObject3.add(key, createParseObject2)
createParseObject3.save()
emitter.onNext(true)
}
fun doNetworkCall(){
repo.doParseNetworkCall()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribeBy(
onError = { error ->
//do something
},
onComplete = {
//do something
}
).addTo(disposable)
}
fun doParseNetworkCall(){
返回Observable.create{emitter->
createParseObject1
createParseObject1.save()
createParseObject2
createParseObject2.add(键,createParseObject1)
createParseObject2.save()
createParseObject3
createParseObject3.add(键,createParseObject2)
createParseObject3.save()
emitter.onNext(真)
}
有趣的网络电话{
repo.doParseNetworkCall()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribeBy(
onError={错误->
//做点什么
},
未完成={
//做点什么
}
).addTo(一次性)
}
我通过以下操作解决了我的问题。我认为这是内存安全的,因为第二组观察对象在第一组观察对象完成之前不会订阅,如果演示者中的组合一次性
已被处置,第二组将不会订阅
repo.saveSomething()
.map {
//Do some non view stuff
}
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribeBy(
onError = { error ->
onErrorMethod()
},
onComplete = {
onSuccessMethod()
}
)
如果
onComplete()
或onError(),则流结束
被调用,在这种情况下,如果调用onComplete或onError,您不需要进行处理。访问分离的视图时,它会崩溃。如果我将片段切换为不调用onComplete/onError,我尝试在其中加入逻辑,但这正是我担心内存泄漏的地方。当它访问onComplete或onError时,我怎么能有onComplete调用而不崩溃呢视图?如果view!=null,则将整个oncomplete/onerror包装在视图!=null上?使用不做任何操作的观察者订阅,然后使用更新UI的观察者订阅如何。这样,当您处理UI观察者时,流将继续,因为它仍然订阅了一个观察者。这可能不是最干净的方式,但我认为它可以完成任务我们的api调用独立于活动/片段,因此您必须在服务中调用api(可能是意图服务)并提供对活动或片段的回拨。如果我必须使用intent服务,我会这样做,但我希望避免这种情况。因为我不关心屏幕发生变化时它会返回什么,所以我希望有一种方法可以做到这一点。我会在上午尝试两个订户。
fun onSuccessMethod() {
Observable.just(true)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribeBy(
onComplete = {
//Do view stuff
}).addTo(disposable)
}
fun onErrorMethod() {
Observable.just(true)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io()).subscribeBy(
onComplete = {
//Do view stuff
}).addTo(disposable)
}