0

任何人都可以帮忙。我已经构建了一个以 BOOT_COMPLETED 意图执行的服务,因此我的服务在设备启动时启动。n 在我的 onStartCommand 中,我正在向 AlarmManger 注册服务,以每 15 分钟执行一次。

这可行,但我注意到我的服务永远不会停止,因此当 onStartCommand 完成时 - 它永远不会停止,永远不会调用 onDestroy。

我需要从 onStartCommand 返回一个整数,我相信它控制着生命周期..

我应该返回什么整数?

我究竟做错了什么?

预先感谢

编辑

目前服务返回 super.onStartCommand(......

默认情况下。那么这里返回的是什么?

如果我删除它,我不应该在课堂上我的 onStartCommand 的第一行调用(而不是返回)super.onStartCommand 吗?

4

2 回答 2

1

当您调用onStartCommand()时,它只会将意图传递给您已经创建的服务。它不应该在方法执行后自杀。

要杀死您的服务,请使用stopSelf()然后它将调用onDestroy()您的服务的方法。

根据您在 onStartCommand 中的要求,您可以返回以下任何值:

  • START_CONTINUATION_MASK
  • START_FLAG_REDELIVERY
  • START_FLAG_RETRY
  • START_NOT_STICKY
  • START_REDELIVER_INTENT
  • START_STICKY
  • START_STICKY_COMPATIBILITY

有关详细信息,请仔细阅读 Android服务。

于 2012-07-20T08:08:39.560 回答
0

服务生命周期的SDK文档说

此时服务将继续运行,直到调用 Context.stopService() 或 stopSelf()

对于 的返回值onStartCommand (Intent intent, int flags, int startId),文档说

返回值指示系统应该为服务的当前启动状态使用什么语义。它可能是与 START_CONTINUATION_MASK 位相关的常量之一。

public static final int START_CONTINUATION_MASK 自:API 级别 5

onStartCommand(Intent, int, int) 返回的位描述如何在服务被终止时继续服务。可能是 START_STICKY、START_NOT_STICKY、START_REDELIVER_INTENT 或 START_STICKY_COMPATIBILITY。

所以,如果你想停止你的服务,你应该调用Context.stopService()or Service.stopSelf()

于 2012-07-20T08:07:05.617 回答