android - 为什么 Android 中的音乐服务不受打盹模式的影响?
问题描述
谁能在技术层面向我解释一下,为什么音乐播放器的服务在屏幕关闭后会继续运行。为什么它从不受打盹模式的影响?我想按照类似的思路创建一个服务,但它应该每 20 秒连续执行一次特定任务。
如果有人能解释这一点,我会很高兴。提前致谢。
解决方案
音乐播放器的服务作为“前台服务”运行。
与部分唤醒锁结合使用时,大部分前台服务不受打盹的影响:
如果您的应用需要在应用处于后台时创建前台服务:
ContextCompat.startForegroundService()
在服务内部,将其提升到前台并通过调用发布通知:
startForeground()
来自 Android 文档:“前台服务执行一些用户可以注意到的操作。例如,音频应用程序将使用前台服务来播放音轨。前台服务必须显示通知。即使在用户没有与应用程序交互。”
https://developer.android.com/guide/components/services
通常,音乐应用程序将通过显示艺术家的图像、当前曲目和提供媒体按钮(如播放/暂停/倒带/前进)将前台服务通知从惹恼用户的“责任”更改为资产。
通常不应该使用前台服务来执行定期安排的工作,因为它会大大缩短设备的电池寿命。
相反,请尝试使用WorkManager
,JobScheduler
或Firebase Cloud Messaging
仅在必要时唤醒设备。
但是使用这些解决方案不可能每 20 秒“轮询”或运行一次代码。您确实需要找到一种适用于“Doze”的解决方案,而不是与之抗衡。
推荐阅读
- flutter - 在 DART 中调用操作后如何更新我的页面?
- xml - XPath 仅在任何其他元素之前获取第一个子注释
- react-native - 必须在 Android 应用清单中定义 expo_runtime_version 或 expo_sdk_version 之一
- arm - 障碍 - 如何确保对寄存器的写操作已完成?
- c++ - C++ 编译器 - 运行 ARM SQ2 芯片的 Microsoft Surface Pro X
- c# - 在 MVC 中使用双重值
- regex - 如何按照自定义模式从变量获取所有字符串实例到bash中的数组?
- r - 获取 c++ 异常尝试使用 rvest 和 V8 抓取 javascript 呈现的网页
- css - 我如何内联显示 React 组件
- python - 使用 Beautiful Soup 在嵌套标签中查找价值