我正在使用Retrofit,并希望在用户在我的活动之间导航时(而不是仅仅通过配置更改保留它们),REST生存。几个选项:
AsyncTask
内改进同步通话,并将其保留在保留的"task fragment" IntentService
and broadcast 最好的方法是什么?我可以看到RxJava是一种改造模式,但即便有人建议“最迟取消订阅Observable
中返回的onDestroy
” - 所以不是真正的解决方案,尽管所有关于新版本的炒作都是如此内置Rx支持。
答案 0 :(得分:2)
我认为保留的片段无法实现您想要的效果。它可以帮助处理配置更改,但不能在活动之间进行。
您可能应该将问题分解为2个问题,一个是启动网络呼叫的位置,另一个是接收响应。
对于第一个问题,您可以正常启动Activity / Fragment中的网络调用。如果您要做很多事情,那么您可能希望管理服务中的调用并使用某种队列。
要接收响应,您应该确保您的侦听器(Callback或Subscriber)不与您的Activity / Fragment实例绑定(对于嵌套类或顶级类使用静态)。然后,您可以使用广播或EventBus / Otto将结果转发给活动。
这可以在Callback / Subscriber中处理,也可以在Service上下文中处理。 (虽然如果你想在Activity里面使用Broadcast,你应该引用Context.getApplicationContext()而不是当前的Activity上下文,以防你的Activity被销毁)
执行此操作时,您的网络呼叫应该正常恢复而不会出现错误,即使请求它们的活动已停止。
最后一步是缓存响应,因为如果Activity停止,那么响应将不在哪里。即使网络通话完成,也浪费了。您应该以某种方式缓存这些响应,以便您的Activity / Fragment可以在重新创建时检索它们。
我个人会选择EventBus组合服务。