2011-05-04 59 views
1

我正在开发一个android应用程序,它每n分钟从/向Web服务提取/上传数据。此上传/下载仅在应用程序运行时完成。但未来这可能会改变。使用什么:服务或线程

当新数据下载时,我不更新UI。只有当用户在当前屏幕上时,UI才会更新(应用程序有多个活动)

我的问题是什么是解决此问题的最佳方法。 我不认为服务是正确的方法,因为它听起来像一个矫枉过正的(在目前的情况下)。 AlarmManager可能是一个选项。 在服务内部运行线程是一个选项..就像this

任何指针/建议将是伟大的。 谢谢

回答

5

我在我的活动中使用AsyncTask要求.net网络服务的一些信息,它的工作原理和易于使用。

AsyncTask支持正确和方便地使用UI线程。该类允许执行后台操作并在UI线程上发布结果,而无需操纵线程和/或处理程序。

+0

我最初尝试做同样的事情。我调用一个线程来连接到我的web服务,它获取/上传数据。甚至在下载所有的数据之前,onPostExecute会被执行。你是如何解决这个问题或者有什么建议的? – jsp 2011-05-05 14:22:02

+1

@Anonymous在doInBackground()中,我执行http get请求,一旦得到响应(使用XML的HTTP 200 OK),然后onPostExecute()将被调用,并使用从XML解析的响应数据。我正在做一些授权,返回的数据很小。 – bob 2011-05-05 21:09:15

+0

为什么你不使用类似ksoap的东西,而是使用HttpClient – jsp 2011-05-05 21:47:54

1

那么,在这种情况下,由于该应用程序已经在运行的时间,要么工作很好,但可以从应用程序的任何地方调用一个服务,所以这是我将使用该服务的地方线。

如果你想创建线程只用于可以说Main.java,那么线程将工作正常,这些是我可以看到真正做出任何差异的唯一的东西,他们真的很接近,并且在这种情况下,既没有提供明确的“正确”答案,但我会选择服务

0

只需在上传/下载完成后广播消息,然后让接收方启动服务,然后让该服务自行停止。你完成了。

这应该完成,如果你不打算轮询服务器的新信息或任何东西。这种方法主要是一次更新,解释,完成。等到下一次更新。主要针对大多数情况下的流媒体......但取决于你所得到的。

0

我认为你提到的所有方法都可以。我个人是这样的:

  1. 使用AlarmManager唤醒下载服务。当显示活动时启动它,当活动隐藏时停止它。

  2. 下载服务应该是短暂的:启动它进行上传/下载然后关闭它。

  3. 如果下载服务确实得到了一些新的数据,它会发送一个活动监听的广播。

相关问题