对于前台服务,使用 Context.startForegroundService(Intent) 而不是 Context.startService(Intent) 有什么好处吗?

我在文档中读到,其中隐含了启动的服务将调用 .但是,由于Android O正在对后台和前台服务进行更改,因此与使用旧方法相比,它是否有任何其他性能改进,或者它只是未来的最佳实践?Context.startForegroundService()startForeground()startService()


答案 1

这既不是关于性能改进,也不是关于好处,也不是关于最佳实践。

从 API 26 开始,系统只是不允许后台应用创建后台服务。

因此,如果您的应用程序在后台(如果它也在前台,欢迎您也这样做),则必须使用而不是前者。然后,服务必须在启动后的前 5 秒内调用,否则系统将停止该服务。Context.startForegroundService(Intent)startService(Intent)startForeground(int, Notification)

还应该提到的是,有信息表明,从后台应用程序启动服务的旧方法仍然适用于当前版本的Android Oreo,但很快就会修复。startService(Intent)

因此,从 API 26 开始,您希望使用新方法,而不是在要启动前台服务时使用。Context.startForegroundService(Intent)startService(Intent)


答案 2

正如我在这里所解释的那样,startForegroundService有一个严重的问题,将不可避免地导致不频繁的ANR。由于无法在应用级别修复此问题,因此不应使用 startForegroundService。我切换到JobScheduler和JobService模型来实现相同的功能。

到目前为止,后一种模式运行良好,我不再在Play商店中看到应用崩溃。新模型完全不同,我花了两天时间基于startForegroundService重构现有代码,但它肯定得到了回报。


推荐