Android 打瞌睡模式和前台服务

Android doze mode and foreground service

我在这里阅读了很多关于打瞌睡模式的问题,例如 Android doze mode, Android N Doze mode - how to keep background download and processing?, 和许多其他问题。但在众多回复中,意见不一。我自己无法测试(模拟器不支持我的处理器,我唯一的测试设备是android 5.1)。我想知道接下来的情况。我有一个 activity,它控制媒体播放器。在 android 6.0 及更高版本的设备上,它不会像预期的那样工作,这是打瞌睡模式的原因。正如许多解决方案所说,要防止打瞌睡模式,它应该在前台的单独进程中启动服务,并从那里控制媒体播放器。问题是:如果我在单独的进程中启动带有部分唤醒锁的前台服务,除了显示通知外什么都不做,并将控制权留给我的 activity 中的媒体播放器,它是否应该阻止打瞌睡模式?或者除了 window 经理让屏幕保持开启之外,还有其他方法吗?

根据回答:

In this post's comments on Sep 17 Dianne Hackborn writes:

Apps that have been running foreground services (with the associated notification) are not restricted by doze.

- (sec_aw)

使用前台服务似乎可以防止应用程序被 Doze 杀死。

不过请注意,一些供应商(我知道三星,但可能还有其他供应商)创建了他们自己的 RAM conservation/battery 节省工具。这些可能会表现出与 Doze 完全不同的模式,并且通常还有很多其他的环节需要跳过。也不能保证您在这些设备上获得相同的行为 - 它们可能或多或少具有侵略性,而更具侵略性的设备在保持服务或其他活动方面往往更糟。

也没有通用的方法来处理这些问题,但有人 an entire website 致力于展示哪些供应商存在问题,以及潜在的解决方法。请注意,大多数有问题的供应商只提供最终用户解决方案,这意味着您(开发人员)无法在用户不做某事的情况下修复它。

虽然这很不幸,但当公司实施他们自己的 Android 版本时,情况几乎就是这样。此外,根据我自己在三星 phone 上的经验(主要是作为用户而不是开发人员),这些设置并不总是受到尊重并且仍然会导致烦人的行为。

无论如何,只要存在 Doze,前台服务就应该没问题。然而,在其他供应商身上,所有的赌注都落空了,你只能任由供应商实施某种优化系统的摆布。在某些公开的操作系统上(同样,请参阅前面链接的网站),您也别无选择,只能要求用户修复某些设置以保持内容正常运行。