在Android中执行网络操作的最佳做​​法是什么?

Gal*_*aim 3 android android-networking

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

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

这非常复杂和肮脏.

正在使用类似Fragment(with setRetainInstance(true))的东西,它启动AsyncTasks并且对Activity的回调足够好?

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

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

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

Com*_*are 10

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

接下来的问题是:你关心手术多少钱?

例如,如果要调用StackOverflow API来检索要显示给用户的一些问题,那么如果用户在进行Web服务调用时导航远离活动,则可能不关心结果.在这种情况下,我只是使用Retrofit(或在您的保留片段中启动自己的HTTP和JSON在后台的线程代码中),并将其称为好.

一个IntentService将开始发挥作用,如果:

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

  • 您正在按计划进行Web服务调用(例如AlarmManager)或由其他事件(例如,ConnectivityManager广播)驱动,例如处理设备可以访问Internet时需要执行的磁带备份的磁带队列,要么

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

为了让你的UI层知道这样的结果IntentService,我只是在其他任何事情上ResultReceiver.我喜欢Square的Otto,但任何活动巴士(例如,greenrobot的EventBus)或者LocalBroadcastManager都可以使用.

SyncManager 也是另一种选择,虽然这是我的待办事项列表.

但是,我不一定会将这些描述为"最佳实践",因为Android对我们来说有点过于流畅,不能在这个领域宣布"最佳实践",特别是没有对用例进行非常精确的描述.他们"并非完全荒谬"的做法.