将REST调用与“活动”解耦的最佳方式



我正在使用Reform,并且希望REST调用在用户在我的活动之间导航时仍然存在(而不是在配置更改时保留它们)。几个选项:

  1. AsyncTask中修改同步调用,并将其放入保留的"任务片段"中
  2. 改装IntentService和广播内的同步呼叫
  3. 谷歌建议每个应用程序单独使用,至少Volley是这样

什么是最好的方法?我可以将RxJava视为一种改装模式,但即使是这样,也只是建议"最晚取消订阅onDestroy中返回的Observable"——所以这不是一个真正的解决方案,尽管人们大肆宣扬新的内置Rx支持。

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

你可能应该把你的问题分成两个问题,一个是从哪里开始网络呼叫,另一个是接收响应。

对于第一个问题,您可以在Activity/Fragment中正常启动网络调用。不过,如果您要经常这样做,您可能需要管理服务中的呼叫并使用某种队列。

要接收响应,只需确保侦听器(回调或订阅服务器)没有绑定到Activity/Fragment实例(对嵌套类或顶级类使用static)。然后,您可以使用广播或EventBus/Otto将结果转发到"活动"。

这可以在回调/订阅服务器中处理,也可以在服务上下文中处理。(不过,如果您想在"活动"中使用"广播",则应该引用Context.getApplicationContext()而不是当前的"活动"上下文,以防"活动"被破坏)

这样,即使请求网络呼叫的"活动"已停止,网络呼叫也应正常恢复,不会出现错误。

最后一步是缓存响应,因为如果"活动"停止,那么响应将不在任何位置。即使网络呼叫已经完成,它也被浪费了。您应该以某种方式缓存这些响应,以便您的活动/片段可以在重新创建时检索它们。

就我个人而言,我会选择EventBus组合服务。

最新更新