android - 在 Android 中执行网络操作的最佳实践是什么?

标签 android android-networking

<分区>

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

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

这非常复杂和肮脏。

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

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

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

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

最佳答案

The network operations I'm referring to are interactions with simple JSON web services

那么接下来的问题是:你对操作有多在乎?

例如,如果您正在调用 StackOverflow API 来检索一些问题以显示给用户,如果用户在 Web 服务调用正在进行时离开 Activity ,您可能不关心结果。在那种情况下,我只使用 Retrofit (或在后台线程中滚动您自己的 HTTP 和 JSON 代码),将其从您保留的 fragment 中删除,并称之为好。

IntentService 将在以下情况下发挥作用:

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

  • 您正在按计划(例如,AlarmManager)或由其他事件(例如,ConnectivityManager 广播)驱动进行 Web 服务调用,例如处理Tape - 一旦设备可以访问互联网就需要完成的支持调用队列,或者

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

为了让您的 UI 层知道来自这样一个 IntentService 的结果,我只想通过 ResultReceiver 做任何其他事情。我喜欢 Square 的 Otto ,但任何事件总线(例如,greenrobot 的 EventBus )或 LocalBroadcastManager 都可以工作。

SyncManager 也是另一种选择,尽管它在我的待办事项列表中。

但是,我不一定会将其中任何一个描述为“最佳实践”,因为 Android 的流动性太强,我们无法在该领域宣布“最佳实践”,尤其是在没有非常精确的描述的情况下用例。它们是“并非完全荒谬”的做法。

关于android - 在 Android 中执行网络操作的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059558/

相关文章:

android - 想要 TextView 通过单击来改变颜色,就像单击按钮一样

java - 如何在尝试执行注册 Activity 时修复 Android 中的 "com.android.Volley.TimeoutError"

android - 在Android中使用kotlin下载文件并将其保存到下载文件夹

java - 为什么我无法从 Firebase 实时数据库检索用户名和密码

android - 在 Android 应用程序中解析 XML 响应

java - 在 Android 中以编程方式更改 DNS

android - 接收 XML 文件已损坏(在 sprint 网络上)?

java - 下载大文件时 Android 应用程序出现滞后

android - 将游标数据放入数组

android - 如何从android中的google plus api获取oauth 2.0 token ?