1

我需要经常使用JSON Web服务(每隔5,10秒)。Android - 重复WebService调用

我有一个AsyncTask实现的webservice调用,每当我按下一个按钮时执行,用于测试目的。

我应该使用处理程序,定时器还是AlarmManager?

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

我使用AsyncTask实现它,因为当web服务调用中出现问题时,我无法承受应用程序挂起,因此如果第一次调用失败,如果第二次调用失败,则不应该有任何问题,并且数据I提取将在第二次执行任务时显示。

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

感谢

+0

使用[服务](http://stackoverflow.com/a/6012786/1025599) – Nachi 2013-03-19 16:11:04

+0

你想问什么?如何管理频繁访问web服务或如何每5/10秒使用webservice? – 2013-03-19 16:13:10

+0

我需要每5/10秒使用一次webservice。 – pteixeira 2013-03-19 16:15:03

回答

0

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

+0

他正在提出Web服务请求。这意味着他会使用HTTP,所以如果他使用处理程序,他会在UI线程上运行HTTP请求的异常。 – 2013-03-19 16:14:44

+0

谁说它在UI线程上? – mihail 2013-03-19 16:15:44

+0

处理程序一直都是,除非你确实有工作要做。 – 2013-03-19 16:16:00

0

处理程序不会创建新的线程,它们出现在UI线程中。因此,您无法对其执行HTTP请求。

我其实不会为你的用例建议AsyncTasks。你会有请求完成乱序。另外,根据您运行的操作系统版本,它们可能并行运行,也可能不运行。

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

+0

如何将服务/线程设置为每5/10秒运行一次?提供的代码[here](http://stackoverflow.com/a/6012786/1025599)显示了如何创建一个服务以及如何重复它,但我不知道如何启动它。我是否使用MainActivity的onCreate方法启动它? – pteixeira 2013-03-19 18:01:51