通过使用START_STICKY,如果我的服务被任务管理器崩溃/关闭,它会自动重新启动。我看到有一系列服务会以不同的顺序重新启动。我想优先重启这个服务,以便将其放在队列的前面更快地启动。
通常需要15秒到45秒来重新启动该服务。是否有一种方法可以优先启动此服务而不是其他服务?
通常需要15秒到45秒来重新启动该服务。是否有一种方法可以优先启动此服务而不是其他服务?
我猜这个解决方案有点不太好,但你可以使用一个新的服务,它以START_STICKY
开始,并将所有其他服务设置为START_NOT_STICKY
。
然后,您可以使用新服务来启动所有其他服务(虽然这并不一定需要)。这实际上是一个简单的实现,因为您可以将整个意图传递给要启动的服务。
然后,您可以在所有服务的OnDestroy()
上添加广播,告诉新服务,其中一个旧服务被系统杀死了。您还可以通过OnDestroy()
传递旧的启动意图,以便重新启动。
如果您的新服务被杀死,您可以在重新启动后检查是否有任何其他服务也被杀死,然后优先考虑重新启动。
你的服务是长时间运行的吗?如果是的话,尽量摆脱它,并且只在需要时启动。Android服务不应该作为守护进程运行,而是在没有用户交互和界面需求时作为短暂的后台工作程序运行。
大多数“我只是闲着”的服务可以监听广播意图,并以这种方式成为良好的系统组件。
另外一件事:如果你的服务已经是短时间运行的,并且有任务管理器在运行,那很简单:这是用户的问题,而不是你的错。系统不需要任务管理器,你也不应该关心它们。用户应该知道使用它们对健康无益。