You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android中onStartCommand返回1报错,需返回指定Service常量如何修复?

解决Service onStartCommand返回值的报错问题

嘿,这个问题我之前开发Android应用时也碰到过!Android对Service的onStartCommand方法返回值有严格要求,不能随便写个整数,必须使用系统预定义的特定常量,你直接返回1系统自然识别不了,所以才抛出这个报错。

为什么会出现这个报错?

Android为onStartCommand定义了四个专用返回常量,每个都对应服务被系统杀死后的不同行为逻辑:

  • Service.START_STICKY_COMPATIBILITY:START_STICKY的兼容版本,不保证服务被杀死后一定会重启
  • Service.START_STICKY:服务被意外杀死后,系统会尝试重启它,重启后传递的intent会是null
  • Service.START_NOT_STICKY:服务被杀死后不会自动重启,除非有新的intent发送过来
  • Service.START_REDELIVER_INTENT:服务被杀死后会重启,并且会重新传递最后一次收到的intent

你直接返回1,系统无法匹配到任何合法的行为规则,所以提示你必须使用上面这几个值之一。

修复方案

根据你的业务需求选择对应的常量返回即可,下面是修改后的代码示例:

public int onStartCommand(Intent intent, int flags, int startId) { 
    try { 
        player.start(); 
        isRunning = true; 
    } catch(Exception e) { 
        isRunning = false; 
        player.stop(); 
    } 
    // 根据业务需求选择以下其中一个返回值
    return Service.START_STICKY; 
    // 不需要自动重启时用:return Service.START_NOT_STICKY;
    // 需要保证任务续接时用:return Service.START_REDELIVER_INTENT;
    // 兼容旧版本系统时用:return Service.START_STICKY_COMPATIBILITY;
}

额外小提示

  • 如果你的服务是执行一次性任务,完成后就可以结束,选START_NOT_STICKY最合适
  • 如果是音乐播放这类需要持续运行的服务,START_STICKY能保证意外崩溃后自动重启
  • 要是有必须完成的任务(比如文件下载),START_REDELIVER_INTENT可以让服务重启后继续处理之前的任务

内容的提问来源于stack exchange,提问作者Pavel Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:10:23