【问题标题】:Local service or remote service?本地服务还是远程服务?
【发布时间】:2010-07-19 14:20:28
【问题描述】:

我有一个必须永久运行的后台服务。该服务只需要与我的活动交互。

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

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

【问题讨论】:

  • ´adb bugreport´ 告诉我,我的服务崩溃太多并被破坏了

标签: android android-2.2-froyo


【解决方案1】:

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

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

我如何检查活动简历如果 服务还在运行吗?

一般来说,你不会。

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

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

使用遥控器有好处吗 服务在一个单独的过程中(到 延长使用寿命),这样当 活动进程被杀死 服务还活着吗?

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

  • 您从活动中调用stopService()
  • 服务调用stopSelf()
  • Android 终止服务
  • 用户通过设置应用程序终止服务
  • 用户通过“任务杀手”(至少是 Android 2.1 及更早版本)终止服务

【讨论】:

  • 如果后台服务仍在工作,它希望用户在重新出现时通知活动什么?
  • @Snej:我不明白你的问题,抱歉。
  • 抱歉,在我意识到之前,我的上一条评论有点混乱。问题是如何确定用户何时重新启动应用程序,后台服务是否仍在运行或已被终止。通过 Macarse 的回答,可以在服务中抛出一个 Intent。但是如何才能知道服务是重启了还是还在运行呢?
  • 最后,我最终使用了 hackbod 在groups.google.com/group/android-developers/browse_thread/thread/…提出的建议
  • @CommonsWare 我想在后台发送图像并在列表视图行中显示特定上传的用户进度,我的意思是说使用服务的 http 通信并在 UI 上通知用户然后我应该使用前台服务对吗?此任务是否需要远程服务?图像将在 10-15 左右,不超过此值。
【解决方案2】:

您为什么想知道服务是否正在运行? 如果你需要它的东西,只需抛出一个Intent,如果它没有运行,它将按意图启动。

关于第二个问题:

当您的 Activity 关闭时,您的服务不会“死亡”。

【讨论】:

  • 我想知道它,因为应用程序正在记录 gps 数据,并且永久记录至关重要。所以我想通过活动让用户知道它是否因为异常或终止服务而停止记录。
  • 我和 Snej 有同样的担忧。
  • @Sney:这是一个 hack,但您可以尝试从服务中发送 Broadcasts,让所有人都知道您还活着。
【解决方案3】:

startforeground() 中启动服务。它将增加服务的时间跨度。

【讨论】:

    猜你喜欢
    • 2020-10-10
    • 2015-05-24
    • 2011-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-28
    • 2011-07-22
    相关资源
    最近更新 更多