如何制作一个在应用程序没有时运行的android服务?

时间:2013-08-11 09:57:54

标签: android service notifications push-notification

我对任何操作系统中的服务的了解是,它们通常在后台运行并执行他们必须做的任何工作。

但是我第一次熟悉Android服务时,我感到很困惑。

它似乎只在应用程序运行时运行,而对我来说,它们不再是复杂的线程。

我真的错了吗? 如何创建在应用程序不运行时运行的服务?(这样我可以检查更新并为用户创建通知,然后如果用户选择打开它们将引导他进入应用程序)。 推送通知与它有什么关系吗?

修改

谢谢你们到目前为止的答案。 我的问题似乎是服务只在设备启动时正式启动。我在应用程序启动时调用startService,但这似乎没有帮助。应用程序关闭时服务仍然死亡(除非它已启动) 我也从不打电话给stopService

2 个答案:

答案 0 :(得分:2)

如果您尝试实现在(后台)服务中执行的长时间运行的任务,则必须在服务中启动一个或多个线程。因此,该服务只是让您有机会拥有应用程序上下文而无需具有用户界面;)您可以将其视为一种容器。

This page为您提供有关Android中不同线程方法的精彩概述。正如您所看到的,服务没有自己的主题。

无论如何,在你的情况下,似乎AlarmManager可能是更好的选择。始终为轮询信息运行服务可能会占用大量CPU和电池(例如,请参阅this post)。因此,尽量避免让线程一直运行。

如果您可以从服务器推送有关更新的信息,那就没关系了。在这种情况下,请查看Googles Cloud Messaging

答案 1 :(得分:0)

首先评论我的问题的

Michael 在关于startService的评论中是对的()

所以它是这样的:

  • 我的接收器仅在启动时激活,并使用AlarmManager 将服务计时到一定的时间间隔。
  • 我所做的是将活动绑定到服务。如果服务 关闭了,我把它绑定并取消绑定,然后到应用程序时 终止了,没有什么可以让它活着。
  • 只需确保服务正确启动即可 startService如果它还没有打开,我设法保留了服务 在任何时候都活着
  • 还要感谢 Trinimon ,他们给出了很好的解释 服务是,以及不重载CPU的重要性 过度投票。 (这是一种权衡的情况)
祝所有人好运:)