在Android中实现简单的服务

时间:2011-07-11 21:10:38

标签: android service android-service

假设我想在每30秒查询一次Web API的Android设备上创建一个服务(注意:小写 - 我并不暗示android.app.Service),并为订阅的Activity提供任何更新。我只期待一项活动将订阅此服务。我应该

  1. 在android.app.Service上创建一个完整的并将我的Activity绑定到该服务?或...
  2. 创建一个轻量级的“服务”(小写),它基本上是一个实现观察者模式的线程,并定期更新任何已注册的观察者(其中应该只有一个)具有新信息。
  3. 在线示例的网址也会受到赞赏。

4 个答案:

答案 0 :(得分:1)

使用IntentService类/模式。在您的活动上创建一个onHandleIntent,您的android.app.Service实例也会回调,并且您已完成设置。它的轻量级和Android将负责大部分的内务管理。

http://developer.android.com/reference/android/app/IntentService.html

答案 1 :(得分:1)

永远不要指望您的活动保持活力

除了短期卸载工作外,您的活动不应启动线程。系统可能始终暂停活动。因此,您可能不依赖于某项活动来继续运行。

这几乎意味着一个线程是不行的。另请注意,Thread.sleep没有准确性。它可能会熄火并且太早或太晚唤醒。请参阅android:java.lang.Thread.sleep documentation

Causes the thread which sent this message to sleep
for the given interval of time (given in milliseconds).
The precision is not guaranteed - the Thread may sleep
more or less than requested.

这两个事实几乎破坏了基于线程的想法。我强烈建议您查看android服务基础架构。

答案 2 :(得分:0)

我认为AsyncTask可以为您完成所有工作。您有一个doInBackgroud方法,您可以在onPostExecute中查询API并发送流程消息(如果需要和更新)。在那里,您可以开始新的AsyncTask

答案 3 :(得分:0)

我回答过this关于服务的问题。您可以将AsyncTask绑定到服务中以处理Web查询