我的改造界面方法返回带有响应的rx Single
@GET("/data")
Single<Response<List<Foo>>> getData();
在我的活动onStart()
方法中,我调用getData()
来填充数据,直到显示加载Progress
它将成功解除或失败
getData().observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.doOnSubscribe(() -> showProgress("loading"))
.doOnSuccess(listResponse -> hideProgress())
.subscribe(new SingleSubscriber<Response<List<Foo>>>() {
@Override
public void onSuccess(Response<List<Cat>> response) {
if (response.isSuccessful()) setItems(response.body());
}
@Override
public void onError(Throwable error) {
hideProgress(error.getMessage());
}
})
我第一次开始Activity
一切顺利,Progress
将显示,成功或失败,它会被玷污
问题是
无论何时我通过Activity
开始新的startActivity()
,然后再次回到我的Activity
onStart()
,我的Retrofit
电话会再次被执行( i我每次输入Activity
时都会保持数据新鲜
但是会发生什么呢Progress
一直显示,没有成功,没有失败发生,我甚至记录了我在服务器上发出的请求,而且没有请求被请求“在我第二次不是第一次Activity
打开了“
问题是Retrofit
或Rxjava
是否有任何方法可以在每次活动开始或从堆栈中进行操作时执行新数据事件
我们是否注定要Android activity lifecycle
诅咒......
答案 0 :(得分:1)
我的第六感告诉我,这是一个愚蠢的错误或误解
我正在使用CompositeSubscription
添加我的所有调用,并通过调用onStop()
在CompositeSubscription.unsubscribe()
中安全取消订阅所有这些调用以防止资源泄漏
发生了什么事情,当我回到我的活动时,我正在为复合材料添加相同的subscription
并立即取消订阅
文档说:
public void unsubscribe()
取消订阅自己和所有内部订阅。
调用此方法后,将立即取消订阅添加到CompositeSubscription&gt;的新订阅。
我通过调用clear()
代替
public void clear()
取消订阅当前属于此&gt; CompositeSubscription的所有订阅,并将其从CompositeSubscription中删除,以便&gt; CompositeSubscription为空且能够管理新订阅。
然后您可以再次添加相同的订阅并按其通常的行为进行调用
因此而失去了24小时。 -_-。
答案 1 :(得分:0)
当您返回到您需要覆盖onResume()
方法的活动时,您没有停止活动。而不是onCreate()
或onStart()
在onResume()
中调用您的getData方法。这将完成这项工作。