START_STICKY用于前台服务

5

前台服务具有非常高的优先级,并且极不可能被系统杀死,因此在onStartCommand中返回START_STICKY是否有意义呢?

备注:这个问题不是关于START_STICKYSTART_NON_STICKY之间的区别,而是关于START_STICKY与前台服务相关性的可用性。

1个回答

5
"

非常不可能被杀死

" != "

永远不会被杀死

"。例如,用户可以通过多种方式终止您的进程。

如果您关心这些情况并希望在符合条件时重新启动服务,请使用START_STICKYSTART_REDELIVER_INTENT。如果您愿意让服务保持停止状态,请使用START_NOT_STICKY

例如,如果您正在编写音乐播放器,请返回START_NOT_STICKY,因为当系统选择重新启动您的服务时,在某个任意时间开始播放音乐可能不适合您的应用程序。

"

1
@Elletlar:我从来没有同意谷歌的那个建议。我想我甚至在这方面提出了一个问题,但是文档问题往往会被路由到谷歌总部的/dev/null。 - CommonsWare
你能举个例子说明系统何时会终止正在播放音乐的前台服务吗? - Florian Walther
@FlorianWalther:如果用户在设置中按下“强制停止”按钮,Android将终止该进程。显然,在某些情况下,从概述屏幕中删除任务将终止进程,尽管有前台服务。用户可能会使用第三方“任务管理器”来终止进程。而且,由于年龄过大,Android可能会作为普通的内存杀手逻辑的一部分终止该进程。前台服务并不会永远存在。 - CommonsWare
好的,谢谢你。但是我的结论正确吗?即START_STICKY对于前台服务的作用比后台服务(Oreo之前)要小一些。 - Florian Walther
好的,所以在不同的情况下两种方法都是合理的?那就是我需要知道的全部了。 - Florian Walther
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接