当应用程序/活动被杀死时,如何避免系统杀死服务
-
21-12-2019 - |
题
我有一个应用程序与一个 activity
还有一个 service
.如果我杀了 activity
而 service
它也被杀了。对我而言,服务不会被杀死是非常重要的。当系统杀死(或者我通过清除"最近的应用程序"列表来杀死它)时,如何做到这一点 activity
该 service
仍然保持活跃,直到它完成它的工作?提前感谢!
解决方案
这对我来说非常重要的是,服务不会被杀死
基于用户活动(最近的任务列表、第三方任务管理器、设置中的"强制停止"等),您的进程可以在任何时候以任何理由被终止。)或基于操作系统需求(系统RAM越来越低)。你无法阻止这一点。
您可以采取一些步骤来最大限度地减少操作系统自行决定终止您的进程的可能性,例如使用 startForeground()
在服务上,但这确实会阻止用户对您的应用程序的进程执行用户想要的操作。
我正在显示该服务的窗口,因此如果服务停止,则窗口消失。
据推测,用户 需要 如果用户通过最近的任务列表,任务管理器等显式摆脱您的应用程序,则您的窗口将消失。当然,欢迎您在文档中告知用户这将产生的任何负面影响。
也欢迎您尝试将该服务放在一个单独的过程中。我的理解是,这对android4.4上的recent-tasks列表没有帮助,尽管它可能在早期版本的Android上。这是否有助于第三方任务管理器可能取决于管理器,而这不应该有助于从设置中"强制停止"。这也意味着您将不得不处理IPC,增加系统RAM消耗,而您的主进程和服务进程都在运行,等等。
其他提示
你可以尝试返回 START_STICKY
从 onStartCommand
为您服务:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
handleCommand(intent);
// We want this service to continue running until it is explicitly
// stopped, so return sticky.
return START_STICKY;
}
你在运行一个绑定的服务吗?如果是这样,那么系统将在最后一个客户端活动断开连接(终止)时杀死它。这是来自 参考页:
当最后一个客户端与服务解除绑定时,系统会销毁 服务(除非服务也由startService()启动)。