奥利奥:JobService不需要startForeground吗?

时间:2018-12-14 19:47:18

标签: android

作为测试,我从已有的工作服务中删除了“ startForeground(notification)”,并且它似乎仍在工作。

我们是否不需要在Android O及更高版本上发布工作服务的前台通知?

我找不到与此相关的特定文档。
任何参考都是很棒的。

非常感谢您

编辑

对于那些有相同问题的人,我已经在生产中测试了几天。我们的应用程序有一个持续的通知,我一直在从作业服务启动/更新它,而没有调用startForeground,并且在crashlytics中没有发现安全异常。我有信心说:

您不需要为短期任务而从作业服务调用startForeground (例外情况很可能适用于正在进行的任务。我的代码只需进行api调用并更新通知视图)

感谢0X0nosugar和WasabiTea

2 个答案:

答案 0 :(得分:2)

  

为了降低发生这些问题的机会,Android 8.0对用户不能直接使用应用程序时的操作进行了限制   与他们互动。应用有两种限制方式:

     
      
  • 后台服务限制:当应用程序处于空闲状态时,其后台服务的使用受到限制。这不适用于   前台服务,使用户更容易注意到。

  •   
  • 广播限制:除少数例外,应用程序无法使用其清单来注册隐式广播。他们仍然可以   在运行时注册这些广播,他们可以使用   清单以注册明确针对的广播   他们的应用。

  •   
     

在大多数情况下,应用可以通过使用以下方法来解决这些限制   JobScheduler职位。这种方法可以让应用安排执行工作   当应用未积极运行但仍为系统提供   在不影响用户的情况下安排这些作业的时间   经验。 Android 8.0对JobScheduler进行了多项改进   这样可以更轻松地替换服务和广播接收器   预定的工作;有关更多信息,请参见JobScheduler的改进。

原始文档在这里-https://developer.android.com/about/versions/oreo/background

希望这可以为您提供帮助

答案 1 :(得分:1)

  

我们是否不需要在Android O及更高版本上发布工作服务的前台通知?

重新阅读了有关Medium(Scheduling jobs like a pro with JobSchedulerJobIntentService for background processing on Android O)的一些帖子以及Android 8.0 Behavior Changes上的文档之后,我得到的印象是您不需要发布前台通知

不必注册为前台parse也很有意义,尤其是因为您正在使用def parse(self, response): for event in response.xpath('//ul[contains(@class, "list-recent-events")]/li'): event_details = dict() event_details['name'] = event.xpath('h3[@class="event-title"]/a/text()').extract_first() event_details['location'] = event.xpath('p/span[@class="event-location"]/text()').extract_first() event_details['time'] = event.xpath('p/time/text()').extract_first() self.found_events.append(event_details) yield event_details 做后台工作(这就是为什么您必须实现{{1 }},以便能够随时应对干扰。

不幸的是,我找不到明确的“您不需要前台通知”,因此所有这些都只是间接证据。