我在the docs中读到Context.startForegroundService()
隐含承诺已启动的服务将调用startForeground()
。但是,由于Android O即将推出后台和前台服务的更改,与使用旧的startService()
方法相比,是否还有其他性能改进,或者它只是最佳实践?
答案 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重构了现有代码,但它肯定能带来回报。