不知何故,我很难解析START_STICKY
标志的official description:
从onStartCommand(Intent,int,int)返回的常量:如果是这样 服务的进程在启动时被终止(在返回之后) onStartCommand(Intent,int,int)),然后将其保持在启动状态 但不要保留这个意图。稍后系统会尝试 重新创建服务。因为它处于启动状态,它会 保证在创建后调用onStartCommand(Intent,int,int) 新服务实例;如果没有任何挂起的启动命令 如果被传递给服务,它将被调用null意图 对象,所以你必须注意检查这个。
此模式适用于将明确启动的内容 停止运行任意时间段,例如服务 表演背景音乐播放。
具体来说,以下四个部分没有技术意义(也就是让我去WTF):
有没有人对此标志有更好的规格?并且,对于任何阅读此内容的Google员工:wtf?你能在内部修复吗?
答案 0 :(得分:1)
START_STICKY and START_NOT_STICKY
START_STICKY告诉操作系统在有足够内存后重新创建服务并再次使用null intent调用onStartCommand()
答案 1 :(得分:1)
如您所知,Android中有两种服务形式:
理解描述的关键是 Started service
必须管理自己的生命周期,即可以停止服务的 ONLY 组件是服务通过调用 stopSelf()
来调用 stopService()
或其他组件。一旦 Started service
启动( onStartCommand()
返回),它就处于启动状态,除非,否则它不会停止调用stopSelf()
或 stopService()
。因此,如果系统过早杀死了服务( stopSelf()
或 stopService()
已被调用),则该服务仍被视为开始状态。您可以通过在 onStartCommand()
中返回一个标记来告诉系统如何继续使用该服务(发信号通知)。
Extending the Service class末尾给出的START_STICKY
标志的描述可能会更清楚。
P.S。关于"并停止运行??" 混淆,尝试将其读作" ...明确启动和停止以便运行... "
修改强>
另请查看this question。