Android:当onStartCommand完成时,不会创建onDestroy

时间:2012-07-20 07:57:08

标签: android android-intent android-service

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

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

我需要从onStartCommand返回一个整数,我认为它控制了生命时间..

我应该返回什么整数?

我做错了什么?

提前感谢

修改

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

默认情况下。那么这里又回来了什么?

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

2 个答案:

答案 0 :(得分: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 Service

答案 1 :(得分:0)

Service lifecycle的SDK文档说

  

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

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

  

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

  

public static final int START_CONTINUATION_MASK   自:API Level 5

     

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

因此,如果您想停止服务,请拨打Context.stopService()Service.stopSelf()