0

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

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

看来它们只在应用程序工作时运行,而对我来说,这使它们不再是复杂的线程。

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

编辑:

谢谢你们到目前为止的回答。我的问题似乎是该服务仅在设备启动时才正式启动。当应用程序启动时,我确实调用了 startService,但这似乎没有帮助。当应用程序关闭时,服务仍然会死掉(除非它已启动)而且我从不调用 stopService

4

2 回答 2

2

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

本页为您提供了有关 Android 中不同线程方法的一个很好的概述。如您所见,服务没有自己的线程。

无论如何,在您的情况下,似乎 anAlarmManager可能是更好的选择。一直运行用于轮询信息的服务可能会非常消耗 CPU 和电池(例如,请参阅这篇文章)。所以尽量避免让线程一直运行。

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

于 2013-08-11T13:11:28.300 回答
0

首先评论我的问题的迈克尔在他对 startService() 的评论中是正确的

所以它是这样的:

  • 我的接收器仅在启动时激活,并使用 AlarmManager 将服务定时到特定时间间隔。
  • 我所做的是将活动绑定到服务。如果服务关闭并且我绑定它并取消绑定它,那么当应用程序终止时,没有任何东西可以让它保持活力。
  • 通过简单地确保服务已使用 startService 正确启动(如果它尚未启动),我设法让服务始终保持活动状态
  • 还要感谢Trinimon,他很好地解释了服务是什么,以及不要因过度轮询而使 CPU 过载的重要性。(这是一种权衡的情况)

祝你们好运 :)

于 2013-08-11T16:35:10.920 回答