首页 > 解决方案 > 为什么 Android 中的音乐服务不受打盹模式的影响?

问题描述

谁能在技术层面向我解释一下,为什么音乐播放器的服务在屏幕关闭后会继续运行。为什么它从不受打盹模式的影响?我想按照类似的思路创建一个服务,但它应该每 20 秒连续执行一次特定任务。

如果有人能解释这一点,我会很高兴。提前致谢。

标签: androidandroid-serviceforeground-serviceandroid-wake-lock

解决方案


音乐播放器的服务作为“前台服务”运行。

与部分唤醒锁结合使用时,大部分前台服务不受打盹的影响:

WakeLock 在现代 Android 中的用途?

如果您的应用需要在应用处于后台时创建前台服务:

ContextCompat.startForegroundService()

在服务内部,将其提升到前台并通过调用发布通知:

startForeground()

来自 Android 文档:“前台服务执行一些用户可以注意到的操作。例如,音频应用程序将使用前台服务来播放音轨。前台服务必须显示通知。即使在用户没有与应用程序交互。”

https://developer.android.com/guide/components/services

通常,音乐应用程序将通过显示艺术家的图像、当前曲目和提供媒体按钮(如播放/暂停/倒带/前进)将前台服务通知从惹恼用户的“​​责任”更改为资产。

通常不应该使用前台服务来执行定期安排的工作,因为它会大大缩短设备的电池寿命。

相反,请尝试使用WorkManagerJobSchedulerFirebase Cloud Messaging仅在必要时唤醒设备。

使用 Work Manager API 执行频繁的任务

但是使用这些解决方案不可能每 20 秒“轮询”或运行一次代码。您确实需要找到一种适用于“Doze”的解决方案,而不是与之抗衡。


推荐阅读