4

在 Android 中执行网络操作的最佳实践是什么(无需在 ContentProvider 中存储数据)?

目前我使用的模式类似于http://www.youtube.com/watch?v=xHXn3Kg2IQE中描述的模式- 一个包装在 Fragment、IntentService 和 ResultReceiver 中的服务助手。

这是相当复杂和肮脏的。

是否使用类似 Fragment (with setRetainInstance(true)) 的东西来启动 AsyncTasks 并回调 Activity 是否足够好?

我想我还需要处理在活动暂停然后恢复时完成任务的情况。

有没有比这里提出的更好的策略?

编辑:我所指的网络操作是与简单 JSON Web 服务的交互

4

1 回答 1

11

我所指的网络操作是与简单 JSON Web 服务的交互

接下来的问题是:您对手术的关心程度如何?

例如,如果您正在调用 StackOverflow API 来检索一些要显示给用户的问题,那么如果用户在 Web 服务调用进行时导航离开活动,您可能并不关心结果。在这种情况下,我只需使用Retrofit(或滚动您自己的 HTTP-and-JSON-in-a-background-thread 代码),从您保留的片段中启动它,并称之为好。

如果出现以下情况, AnIntentService将发挥作用:

  • 您更关心正在发生的操作(例如,您正在修改服务器上的数据,而不仅仅是检索它),因此需要一项服务来帮助确保您的流程可能存在足够长的时间以完成工作,或者

  • 您正在按计划AlarmManager例如,或者ConnectivityManager

  • Web 服务调用的结果可能不仅仅影响 UI 的单个部分,因此您希望 Web 服务调用由活动之外的组件“拥有”

为了让你的 UI 层知道这样的结果IntentService,我只想在ResultReceiver. 我喜欢 Square 的Otto,但任何事件总线(例如,greenrobot 的EventBusLocalBroadcastManager都可以使用。

SyncManager也是另一种选择,尽管这是我的待办事项清单。

但是,我不一定将这些中的任何一个描述为“最佳实践”,因为 Android 有点过于流畅,我们无法在该领域声明“最佳实践”,尤其是在没有对用例进行非常精确的描述的情况下。它们是“不完全荒谬”的做法。

于 2013-08-05T14:06:32.380 回答