从“活动”中分离REST调用的最佳方法

时间:2014-10-07 15:27:21

标签: android retrofit

我正在使用Retrofit,并希望在用户在我的活动之间导航时(而不是仅仅通过配置更改保留它们),REST生存。几个选项:

  1. AsyncTask内改进同步通话,并将其保留在保留的"task fragment"
  2. IntentService and broadcast
  3. 内改进同步通话
  4. Google suggests每个应用单身,至少与Volley ......
  5. 最好的方法是什么?我可以看到RxJava是一种改造模式,但即便有人建议“最迟取消订阅Observable中返回的onDestroy” - 所以不是真正的解决方案,尽管所有关于新版本的炒作都是如此内置Rx支持。

1 个答案:

答案 0 :(得分:2)

我认为保留的片段无法实现您想要的效果。它可以帮助处理配置更改,但不能在活动之间进行。

您可能应该将问题分解为2个问题,一个是启动网络呼叫的位置,另一个是接收响应。

对于第一个问题,您可以正常启动Activity / Fragment中的网络调用。如果您要做很​​多事情,那么您可能希望管理服务中的调用并使用某种队列。

要接收响应,您应该确保您的侦听器(Callback或Subscriber)不与您的Activity / Fragment实例绑定(对于嵌套类或顶级类使用静态)。然后,您可以使用广播或EventBus / Otto将结果转发给活动。

这可以在Callback / Subscriber中处理,也可以在Service上下文中处理。 (虽然如果你想在Activity里面使用Broadcast,你应该引用Context.getApplicationContext()而不是当前的Activity上下文,以防你的Activity被销毁)

执行此操作时,您的网络呼叫应该正常恢复而不会出现错误,即使请求它们的活动已停止。

最后一步是缓存响应,因为如果Activity停止,那么响应将不在哪里。即使网络通话完成,也浪费了。您应该以某种方式缓存这些响应,以便您的Activity / Fragment可以在重新创建时检索它们。

我个人会选择EventBus组合服务。