Android Service先返回START_STICKY再返回START_NOT_STICKY的状态疑问
Android服务重启策略的更新规则
是的,服务的重启行为会以最后一次调用onStartCommand()返回的标记为准。
Android系统会持续跟踪每个服务最后一次从onStartCommand()返回的重启策略:
- 首次返回
START_STICKY时,系统会记录该策略:此时若服务因系统内存不足被杀死,会自动重启,重启时onStartCommand()会收到nullIntent。 - 当第二次调用
onStartCommand()并返回START_NOT_STICKY后,系统会更新保存的该服务的重启策略。后续如果服务因系统回收被终止,系统将不会自动重启它——除非你通过startService()主动触发启动。
需要注意的例外场景:
- 若服务被用户手动强制停止(如系统设置中操作),或因电池优化、厂商定制的后台管控策略被终止,无论之前返回何种标记,系统都不会自动重启该服务。
内容的提问来源于stack exchange,提问作者Daniel D.
相关产品推荐
相关产品推荐

