系统杀死内存后由BOOT_COMPLETE启动的服务会发生什么?
如果不重新启动手机,是否会重新启动?是否有可能以某种方式重新启动它?
尽可能避免重要服务被杀害的最佳做法是什么?
答案 0 :(得分:1)
如果您需要重新启动该服务,那么您应该使用AlarmManager在单独的BroadcastReceiver中检查服务,但名义上,当系统因内存而终止服务时,它将不会自动重新启动。
答案 1 :(得分:1)
您可能需要查看START_STICKY
答案 2 :(得分:1)
如果不重新启动手机,是否会重启?
可能。如果确实是因为“系统将其杀死为内存”,并且您从onStartCommand()
返回了适当的值(例如START_STICKY
),则应该在将来的某个时刻重新启动它。如果服务因用户操作而被终止(例如,“设置”中“管理服务”屏幕中的“强制停止”),则不会重新启动该服务。
尽可能避免重要服务被杀害的最佳做法是什么?
首先,将您的应用程序设计为不依赖于此类的永久服务。 99.44%的Android应用程序不需要连续运行的服务,更不用说在启动时开始运行的服务了。 Android设备用户讨厌开发人员,他们认为他们的应用程序非常重要,因为他们一直在运行服务 - 这就是为什么我们会因为年老而拥有任务杀手,Force Stop和Android查杀服务。例如,如果您每15分钟检查一次新电子邮件,请使用AlarmManager
和IntentService
,而不是永久运行的服务。
如果您可以向我和您的用户演示,您的0.56%的应用程序确实需要在启动时启动并永久运行的服务,您可以使用startForeground()
。这将向操作系统表明您的服务是前台用户体验的一部分。您必须显示Notification
,理想情况是允许用户在用户不再认为合理的情况下干净地关闭您的服务。
答案 3 :(得分:0)
使用AlarmManager定期发送意图 - 接收意图并确保您的服务正在运行。