【问题标题】:Android - repeating WebService callAndroid - 重复 WebService 调用
【发布时间】:2013-03-19 16:08:44
【问题描述】:

我需要经常使用 JSON 网络服务(最高每 5.10 秒)。

出于测试目的,我在 AsyncTask 中实现了 Web 服务调用,每当我按下按钮时都会执行该调用。

我应该使用处理程序、计时器还是警报管理器?

我有点困惑,因为 AsyncTask 创建了自己的线程,但是这些方法中的任何一个都不会创建另一个线程,从而创建一个将创建另一个线程的线程吗?

我使用 AsyncTask 实现了它,因为每当 Web 服务调用出现问题时,我无法让应用程序挂起,所以如果第一次调用失败,如果第二次调用成功,则应该没有任何问题,并且我的数据m fetching 将在第二次执行任务时显示。

(GCM 可能是一个解决方案,但现在我需要使用轮询而不是通知..)

提前致谢

【问题讨论】:

  • 使用Service
  • 你想问什么?如何管理频繁访问webservice或如何每5/10秒消费一次webservice?
  • 我需要每 5/10 秒使用一次网络服务。

标签: android timer android-asynctask alarmmanager android-handler


【解决方案1】:

我建议您使用Handler.postDelay(Runnable r,long delayMillis) 并在所需延迟后重新开始您的流程。

【讨论】:

  • 他正在发出 Web 服务请求。这意味着他将使用 HTTP,因此如果他使用处理程序,他将在 UI 线程上运行 HTTP 请求时遇到异常。
  • 不幸的是,我现在无法提供示例,我之前已经使用 sendMessage 和 postDelay 从处理程序更新 UI 以一遍又一遍地重新启动相同的过程。我过得很好。但我现在没有这个项目
  • 更新 UI 工作正常。做一个网络服务请求不会。
【解决方案2】:

处理程序不会创建新线程,它们发生在 UI 线程上。因此,您不能对其执行 HTTP 请求。

我实际上不会为您的用例建议 AsyncTasks。您将收到无序完成的请求。此外,根据您运行的操作系统版本,它们可能并行运行,也可能不并行运行。

我对您的建议是使用线程。它们存在于 Android 中,如果您希望在 Activity 处于前台时连续运行某些东西,并且您只需要担心一件事而不是 N 个任务,它们是卸载的首选方法。 (如果你想在不在前台时运行它,你需要一个服务)。

【讨论】:

  • 如何将服务/线程设置为每 5/10 秒运行一次? here 提供的代码显示了如何创建服务以及如何重复它,但我不确定如何启动它。我是否在 MainActivity 的 onCreate 方法上启动它?
【解决方案3】:

我从这里找到了很棒的教程

https://www.thepolyglotdeveloper.com/2014/10/use-broadcast-receiver-background-services-android/

服务将每隔 30 分钟定期在后台运行。根据需求更改。

希望对你有帮助。

【讨论】:

  • 如果您引用链接,请在此处复制一些相关解决方案,因为链接可能会失效。
猜你喜欢
  • 2017-08-22
  • 2015-11-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-26
相关资源
最近更新 更多