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

Wil*_*III 12 java performance android android-service android-8.0-oreo

我在文档中读到Context.startForegroundService()了隐含的承诺,即已启动的服务将调用startForeground().但是,由于Android O即将推出后台和前台服务的更改,与使用旧startService()方法相比,是否还有其他性能改进,或者它只是最佳实践?

Ale*_*mov 15

它既不是性能改进,也不是好处,也不是最佳实践.

从API 26开始,系统不允许后台应用程序创建后台服务.

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

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

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

  • 问题是这5秒是非常短的时间。如果系统繁忙,应该调用 startForeground 的 Service 对象可能不会被调用超过 5 秒,并且偶尔(并非总是)会使应用程序崩溃。谷歌方面的设计非常糟糕,目前还不清楚如何修复。有任何想法吗? (2认同)