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

时间:2017-08-05 18:31:45

标签: java android performance android-service android-8.0-oreo

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

2 个答案:

答案 0 :(得分:11)

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

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

因此,如果您的应用在后台(如果它也在前台,欢迎您也这样做), 必须 < / strong>使用Context.startForegroundService(Intent)代替前startService(Intent)。然后,服务必须在启动后的前5秒内调用startForeground(int, Notification),否则系统将停止服务。

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

因此,从API 26开始,只要您想启动前台服务,就需要使用新的Context.startForegroundService(Intent)方法而不是startService(Intent)

答案 1 :(得分:0)

正如我所解释的here,startForegroundService存在一个严重的问题,不可避免地会导致不频繁的ANR。无法在应用程序级别解决此问题。我切换到JobService模型来实现相同的功能。

后一种模型到目前为止效果很好,我再也没有看到Play商店中的应用崩溃。新模型完全不同,我花了两天的时间基于startForegroundService重构了现有代码,但它肯定能带来回报。