Это, по-видимому, полудокументированное поведение, если комментарии Dianne Hackborn на пост G + "документированы": https://plus.google.com/+AndroidDevelopers/posts/94jCkmG4jff, но передними службами связанное с значком уведомления, должно быть разрешено сохранять блокировку во время доза.
Кажется, что это недействительно, когда у вас есть активность в дополнение к службе переднего плана.
Я создал минимальную реализацию, которая демонстрирует это: https://github.com/petrnalevka/dozetest/blob/master/src/com/urbandroid/doze/DozeService.java
Проблема может быть воспроизведена на
Android M, MRA58K Nexus 5 и MRA58N Nexus 6
У моего сервиса переднего плана есть связанное уведомление, и я выполняю частичную блокировку слежения. К сожалению, режим "Доза" берет верх, и мой замок блокировки нарушен. Я смог предотвратить это, отказавшись от оптимизации батареи или оставив верхнюю активность.
Я считаю, что это ошибка в Android, так как нет причин, по которым услуги переднего плана должны содержать блокировку слежения, но не если они работают сверху.
Я помещаю эту проблему в SO, даже если я уже сообщал об этом на треке Androdi issue здесь https://code.google.com/p/android/issues/detail?id=193802, чтобы найти обходные пути как это критическая функция, чтобы не требовать REQUEST_IGNORE_BATTERY_OPTIMIZATIONS, которая, по-видимому, в настоящий момент означает только REQUEST_REMOVAL_FROM_PLAYSTORE_BY_GOOGLE.
Вот как я смог воспроизвести проблему с помощью adb благодаря подсказкам + Dianne Hackborn:
Кажется, что когда я сохраняю Activity на переднем плане, имея также службу переднего плана, запускающую мое приложение, диспетчер Power Manager распознает как:
PARTIAL_WAKE_LOCK 'Doze lock' DISABLED (uid=10112, pid=24649, ws=null)
Proc # 0: fore F/A/TS trm: 0 24649:com.urbandroid.doze/u0a112 (top-activity)
Если я нажму на дом и оставлю действие, я попаду в состояние:
PARTIAL_WAKE_LOCK 'Doze lock' (uid=10112, pid=24649, ws=null)
Proc # 4: prcp F/S/SF trm: 0 24649:com.urbandroid.doze/u0a112 (fg-service)