2010-07-19 96 views
5

我有一个必须永久运行的后台服务。该服务只需与我的活动进行交互。本地服务或远程服务?

  1. 如何检查活动恢复如果服务仍在运行?在服务类中有没有比静态变量更好的可能性?

  2. 在单独的进程中使用远程服务(以延长服务生命周期)是否有利,以便在活动进程被终止时服务仍然存在?

+0

'adb bugreport'告诉我,我的服务崩溃太多并被销毁 – OneWorld 2010-12-21 14:31:02

回答

7

我有一个后台服务必须 运行永久。

This is not possible。用户或Android会在某个时候终止您的服务。请重新考虑你的架构。

如何检查活动恢复如果 该服务仍在运行?

一般来说,你没有。

在服务类中有比静态变量更好的可能性吗?

如果用户或Android终止您的服务,那么这将不起作用。

是它的优势,在一个单独的进程中使用远程 服务(以 延长使用寿命的时间),以便当 活动过程中被杀死的 服务还活着?

远程服务与活动被销毁后服务是否运行无关。如果调用startService(),运行服务,独立于任何活动的,直到:

  • 你从一个活动叫stopService()
  • 服务调用stopSelf()
  • 的Android终止
  • 用户终止服务通过设置应用程序服务
  • 用户通过“任务杀手”终止服务(Android 2.1及更低版本,至少)
+0

以及如果后台服务仍在执行其工作,它希望用户如何通知活动再次出现? – Sney 2010-07-22 13:57:58

+0

@Snej:我不明白你的问题,对不起。 – CommonsWare 2010-07-22 23:52:44

+0

对不起,我最后的评论有点混乱,直到我意识到它。问题是如何确定用户何时重新启动应用程序,以确定后台服务是否仍在运行或已被终止。 通过Macarse的回答一个意图可以抛出服务。但是,我怎么才能知道该服务是重新启动还是仍在运行? – Sney 2010-08-20 20:45:47

3

为什么你想知道服务是否正在运行? 如果你需要一些东西,只要扔一个Intent,如果它没有运行,它将从意图开始。

与第二个问题关系:

您的服务不会“死”的时候你的活动关闭。

+1

我想知道它,因为应用程序正在记录GPS数据,并且永久登录至关重要。所以我想通过活动让用户知道是否由于异常或终止服务而停止记录。 – Sney 2010-07-21 09:18:29

+0

我和Snej有同样的担忧。 – gregm 2010-08-17 13:33:13

+1

@Sney:这是一个黑客攻击,但你可以尝试从服务中发送“广播”,让每个人都知道你还活着。 – Macarse 2010-10-14 12:40:14

3

startforeground()开始服务。它会增加服务的时间。