我正在使用 Retrofit,并希望当用户在我的活动之间导航时 REST 调用能够继续存在(而不是仅在配置更改时保留它们)。几个选项:
- 改进同步调用
AsyncTask
并将其放入保留的“任务片段” http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html
- 改进同步调用IntentService并广播 https://developer.android.com/training/run-background-service/create-service.html
- Google suggests http://developer.android.com/training/volley/requestqueue.html#singleton每个应用程序的单例,至少对于 Volley 来说......
最好的方法是什么?我可以将 RxJava 视为一种改造模式,但即使有,也只是建议“取消订阅返回的Observable
in onDestroy
最迟” - 所以这不是一个真正的解决方案,尽管人们对新的内置 Rx 支持进行了大肆宣传。
我认为保留的片段不会达到您想要的效果。它可以帮助处理配置更改,但不能帮助处理活动之间的更改。
您可能应该将问题分成两个问题,一个是从哪里开始网络调用,另一个是接收响应。
对于第一个问题,在Activity/Fragment中可以正常启动网络调用。如果您要经常这样做,您可能需要管理服务中的调用并使用某种队列。
要接收响应,您应该确保您的侦听器(回调或订阅者)未绑定到您的 Activity/Fragment 实例(对嵌套类或顶级类使用静态)。然后,您可以使用广播或 EventBus/Otto 将结果转发到活动。
这可以在回调/订阅者中处理,也可以在服务上下文中处理。 (虽然如果你想在 Activity 中使用 Broadcast,你应该引用 Context.getApplicationContext() 而不是当前的 Activity 上下文,以防你的 Activity 被销毁)
执行此操作后,即使请求网络调用的活动已停止,您的网络调用也应该正常恢复而不会出现错误。
最后一步是缓存响应,因为如果活动停止,那么响应将无处可去。虽然网络调用完成了,但是却被浪费了。您应该以某种方式缓存这些响应,以便您的 Activity/Fragment 可以在重新创建时检索它们。
就我个人而言,我会选择 Service 与 EventBus 的组合。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)