让我们讨论Oreo的后台执行限制

时间:2018-07-09 05:25:39

标签: android

https://developer.android.com/about/versions/oreo/background#migration

根据文档,Google仅允许以下内容作为后台进程,

  • 处理高优先级的Firebase云消息(FCM)消息。
  • 接收广播,例如SMS / MMS消息。执行一个
  • 通知中的
  • PendingIntent。在
  • 之前启动VpnService
  • VPN应用程序将自己提升到前台。

  

一个应用程序位于前台时,它可以创建并运行两个应用程序   免费提供前台和后台服务。当应用进入   背景,它有一个几分钟的窗口,它仍然在   允许创建和使用服务。在该窗口的结尾,该应用   被认为是空闲的。此时,系统会停止该应用的   后台服务,就像该应用已调用了“服务”   Service.stopSelf()方法。

     

在某些情况下,后台应用会放置在临时   进入白名单几分钟。当应用程序进入白名单时,它会   可以不受限制地启动服务及其后台服务   被允许运行。当应用程序被列入白名单时   处理用户可见的任务,例如:

查询是

我的应用程序(targetSdkVersion 26),需要在后台下载一个大文件(〜100 MB)(状态,应用程序甚至不在最近的列表中)。我已经创建了一个Service来实现此目的,但是由于我要从最近删除我的应用程序,因此下载将停止。因此, Google确实意味着,应用程序无法在后台使用targetSdkVersion 26执行下载过程吗?

1 个答案:

答案 0 :(得分:2)

  

Google确实意味着,应用无法在中执行下载过程   targetSdkVersion 26的背景?

它对在后台执行服务施加了限制。但是,您仍然可以在后台完成您的工作。

方法1:

如果下载所需数据的时间确实很长,则可以使用新的WorkManager API。

如文档所述,WorkManager用于需要保证即使应用程序退出时系统也将运行它们的任务,例如将应用程序数据上传到服务器。它不适用于进程中的后台工作,如果应用程序进程消失,该后台工作可以安全终止。

您可以schedule a work进行一次或定期工作。此外,它还允许您指定约束,例如所需的Internet连接。对于可延迟或异步任务,应首选此方法。

方法2:创建ForegroundService

或者,您可以立即启动ForegroundService,并在终止服务之前执行任务。在某些情况下,您可能需要请求部分唤醒锁定。

您也可以在此SO上查看我的答案以了解更多详细信息。