Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Android中的音乐服务从不受打盹模式的影响?_Android_Android Service_Foreground Service_Android Wake Lock - Fatal编程技术网

为什么Android中的音乐服务从不受打盹模式的影响?

为什么Android中的音乐服务从不受打盹模式的影响?,android,android-service,foreground-service,android-wake-lock,Android,Android Service,Foreground Service,Android Wake Lock,有谁能在技术层面向我解释一下,为什么音乐播放器的服务在屏幕关闭后会持续运行。为什么它从不受打盹模式的影响?我想创建一个类似的服务,但它应该连续每隔20秒执行一个特定的任务 如果有人能解释这一点,我会很高兴。提前感谢。音乐播放器的服务作为“前台服务”运行 当与部分唤醒锁结合使用时,前台服务在很大程度上不受doze的影响: 如果应用程序在后台时需要创建前台服务: ContextCompat.startForegroundService() 在服务内部,将其升级到前台并通过调用以下命令发布通知:

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


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

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

当与部分唤醒锁结合使用时,前台服务在很大程度上不受doze的影响:

如果应用程序在后台时需要创建前台服务:

ContextCompat.startForegroundService()
在服务内部,将其升级到前台并通过调用以下命令发布通知:

startForeground()
从Android文档: 前台服务执行一些用户可以注意到的操作。例如,音频应用程序将使用前台服务播放音频曲目。前台服务必须显示通知。即使用户没有与应用程序交互,前台服务也会继续运行

通常,音乐应用程序会通过显示艺术家的图像、当前曲目和播放/暂停/回放/转发等媒体按钮,将前台服务通知从烦扰用户的“责任”更改为资产

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

相反,请尝试使用
WorkManager
JobScheduler
Firebase Cloud Messaging
仅在必要时唤醒设备


但是,使用这些解决方案不可能每隔20秒“轮询”或运行代码。你真的需要找到一个解决“打瞌睡”问题的方法,而不是对抗它。

每20秒运行一次的任务会很快耗尽电池电量。我知道,但这是根据业务使用案例,很好的解决方案,但中国OEM在一段时间后阻止workmanager,直到应用程序再次打开后才会运行。谢谢Elletlar。我尝试了wakelock的前台服务,但应用程序被终止。正常的前台服务可以工作,但计划的任务在屏幕关闭时暂停,并在屏幕打开时再次启动。目前,我正在使用带有计时器任务的前台服务定期运行任务