Android 9:后台限制应用程序设置

时间:2019-04-14 20:43:08

标签: android android-service android-9.0-pie

我正在开发音乐播放器应用,当用户启用“背景限制”设置(设置->应用-> [应用名称]->电池->背景)时,我注意到Android 9设备上的行为异常限制)。

这是我在做什么: 我通过调用Service.startService()启动音乐播放器服务,然后在我的应用程序位于前台时通过Service.startForeground()将其设置为前台。

以下是打开“背景限制”时看到的内容: 1)Service.startForeground()将不会发布通知 2)我的前台服务在我的应用程序进入后台一分钟之内被操作系统杀死了

这是我在日志中看到的内容: 1)调用Service.startForeground()时,“由于bg限制,不允许使用Service.startForeground()” 2)当我的应用被操作系统自动杀死时,“由于应用闲置而停止服务”

这是我的问题: 我认为前台服务的全部目的是允许在用户知道的情况下进行后台处理(正在进行的通知); “ Background Restriction”(背景限制)设置是否真的旨在禁止所有后台活动?

有趣的发现: 在GitHub上查看Google的“ Universal Music Player”示例项目时,我注意到他们的示例项目并未像我的应用程序那样被杀死。挖掘之后,我注意到这是因为它们绑定到其服务,并且从未在Activity.onPause()中解除绑定。根据Google的文档,绑定服务不受相同的背景限制。这真的是解决我的问题的方法吗?似乎有点hacky /脆弱。

预先感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这就是我所发现的:

  • “后台限制”(或某些设备上为“允许后台活动”)旨在停止所有后台活动,无论您的服务是否调用了setForeground()

  • 无法解决此设置。您不能以编程方式禁用它。唯一的选择是使用ActivityManager.isBackgroundRestricted()以编程方式检查它是否已启用,并显示一个弹出窗口,通知用户如何禁用此设置

  • 在GitHub上,Google的Universal Music Player示例项目恰好起作用(在撰写本答案时),仅是因为在主Activity暂停时未释放服务绑定。但是,当主要活动被垃圾回收时(通常是30-45分钟,具体取决于设备),示例项目的服务将被终止。