Android O,后台服务运行超过 30 分钟。为啥?

Posted

技术标签:

【中文标题】Android O,后台服务运行超过 30 分钟。为啥?【英文标题】:Android O, Background Service is running for more than 30 minutes. Why?Android O,后台服务运行超过 30 分钟。为什么? 【发布时间】:2017-10-08 22:23:08 【问题描述】:

我正在使用 FusedLocationProvider API 向 PendingIntent 注册一些地理围栏,当我的应用程序通过地理围栏事件启动(应用程序被手动终止以触发此行为)时,我启动了一个后台服务来做一些工作。

在此服务中,我创建了一个单独的后台线程来执行一些长时间运行的任务,并获得了一个唤醒锁,以确保我的任务已完成。该服务会持续运行更长的时间(30 - 50 分钟),即使它不应该如此。根据我对 android O 近期变化的理解,它不应该被列入白名单并让自己运行更长的时间。

PendingIntents 唤醒应用程序是否是期望的行为或某种错误,然后它被视为白名单,即使这些 Intents 不用于通知(即用户可以看到的任何内容)。

或者这些意图属于“接收广播,例如 SMS/MMS 消息”的类别。如上所述here in documentation

【问题讨论】:

谷歌问题跟踪器上的同样问题,我希望有人能比谷歌更快地回答它:) issuetracker.google.com/issues/38162258 【参考方案1】:

这是预览中的一些错误。

但是,您确定您的服务会在 1 分钟后运行吗? 即使在服务被销毁后,您创建的应用程序进程和后台线程也将/可能运行。

所以你的服务确实传递了 onDestroy 回调,但你不会在那里停止你的线程并继续在后台工作。它只会在整个应用程序的进程被杀死时停止,因为 Android 认为它不再重要了。

【讨论】:

以上是关于Android O,后台服务运行超过 30 分钟。为啥?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android O 中保持服务在后台运行?

在后台运行应用程序超过 10 分钟

快速的后台工作

如何让你的 iOS 应用在后台运行超过 3 分钟?

使计时器在后台 iOS 上运行 3 分钟以上

Android 连接时在后台发送数据