Android 将REST调用与活动解耦的最佳方法`

Android 将REST调用与活动解耦的最佳方法`,android,retrofit,Android,Retrofit,我正在使用改型,并希望当用户在我的活动之间导航时,REST调用能够继续存在(而不仅仅是在配置更改时保留它们)。两种选择: 在AsyncTask中改装同步调用,并将其放入保留的 在一个网络中改装同步呼叫 谷歌每应用程序一个单件,至少有截击 最好的方法是什么?我可以将RxJava视为一种改进模式,但即使是这样,也有人建议“最迟在onDestroy中取消订阅返回的Observable”——因此这不是一个真正的解决方案,尽管所有人都在大肆宣传新的内置Rx支持。我认为保留的片段不会达到您想要的效果。它可以

我正在使用改型,并希望当用户在我的活动之间导航时,REST调用能够继续存在(而不仅仅是在配置更改时保留它们)。两种选择:

  • AsyncTask
    中改装同步调用,并将其放入保留的
  • 在一个网络中改装同步呼叫
  • 谷歌每应用程序一个单件,至少有截击
    最好的方法是什么?我可以将RxJava视为一种改进模式,但即使是这样,也有人建议“最迟在
    onDestroy
    中取消订阅返回的
    Observable
    ”——因此这不是一个真正的解决方案,尽管所有人都在大肆宣传新的内置Rx支持。

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

    您可能应该将问题分为两个问题,一个是从哪里开始网络呼叫,另一个是接收响应

    对于第一个问题,您可以在活动/片段中正常启动网络调用。但是,如果要经常这样做,您可能需要管理服务中的调用并使用某种队列

    要接收响应,您应该确保您的侦听器(回调或订户)没有绑定到活动/片段实例(对嵌套类或顶级类使用static)。然后,您可以使用广播或EventBus/Otto将结果转发给活动

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

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

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


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

    嘿,试着看看由它生成的源代码,我认为这是一个很好的开始。它似乎生成了一个基于片段的UI,这不是我所拥有的,我不确定你在我的问题上找到了什么解决方案(请帮助我理解,因为我不想只是复制粘贴)你想对响应做什么?@pomber信不信由你,我正在设计一个与rest服务通信的应用程序最好的方法取决于你想对响应做什么,例如,如果响应没有改变UI中的任何内容,你可以使用服务,如果它总是这样做,你可以使用广播接收器和片段