two*_*amz 6 android android-service android-9.0-pie
我正在开发音乐播放器应用程序,当用户启用“后台限制”设置(设置 -> 应用程序 -> [应用程序名称] -> 电池 -> 后台限制)时,我注意到 Android 9 设备上的奇怪行为。
这是我正在做的事情:我通过调用 Service.startService() 来启动我的音乐播放器服务,然后在我的应用程序处于前台时通过 Service.startForeground() 将其设置为前台。
这是我在打开“后台限制”时看到的内容:1) Service.startForeground() 不会发布通知 2) 我的前台服务在我的应用程序进入后台后一分钟内被操作系统杀死
以下是我在日志中看到的内容:1) 调用 Service.startForeground() 时“Service.startForeground() 不允许由于 bg 限制” 2) 当我的应用程序被操作系统自动终止时“由于应用程序空闲而停止服务”
这是我的问题:我认为前台服务的全部意义在于允许在用户知情的情况下进行后台处理(持续通知);“后台限制”设置是否真的旨在禁止所有后台活动?
有趣的发现:在 GitHub 上查看 Google 的“通用音乐播放器”示例项目,我注意到他们的示例项目并没有像我的应用程序那样被杀死。挖掘后我注意到这是因为它们绑定到他们的服务并且永远不会在 Activity.onPause() 中解除绑定。根据谷歌的文档,绑定服务不受相同的后台限制。这真的是我问题的解决方案吗?似乎有点hacky/脆弱。
在此先感谢您的帮助!
这是我发现的:
“后台限制”(或某些设备上的“允许后台活动”)旨在停止所有后台活动,无论您的服务是否已调用 setForeground()
没有办法绕过这个设置。您不能以编程方式禁用它。您唯一的选择是以编程方式检查它是否使用 ActivityManager.isBackgroundRestricted() 启用并显示一个弹出窗口,通知您的用户如何禁用此设置
GitHub 上的 Google 通用音乐播放器示例项目恰好可以工作(在撰写此答案时),只是因为在主 Activity 暂停时未释放服务绑定。然而,当主 Activity 被垃圾收集时(通常为 30-45 分钟,具体取决于设备),示例项目的服务被终止。
| 归档时间: |
|
| 查看次数: |
3868 次 |
| 最近记录: |