С введением Doze в Android M и Android становится все более и более строгим с фоновыми выполнениями во время Doze. Может ли кто-нибудь уточнить, применяется ли то же самое при расширении собственных служб Android. Например, NotificationListenerService?
Я использую его как таковой
public class ListenForNotificationsService extends
NotificationListenerService {
private String TAG = this.getClass().getSimpleName();
@Override
public void onNotificationPosted(StatusBarNotification sbn) {
Log.d(TAG, "Notification received");
// Do AsyncTask() for network request
}
@Override
public void onNotificationRemoved(StatusBarNotification sbn) {
if (sbn.getPackageName() != null) {
Log.d(TAG, "Notification removed:" + sbn.getPackageName() + ":" + sbn.getId());
}
}
}
Он перестает работать через пару минут, когда устройство переходит в режим ожидания. Я пробовал использовать AlarmManager, JobScheduler, JobIntentService и обычный IntentService. Ни один из них не работает, когда устройство находится в глубоком сне.
Кстати, мое устройство — Huawei Mate 10 Pro. И они были известны агрессивным управлением задачами. Но я внес свое приложение в белый список, отключил все, что можно отключить со стороны Huawei, что убивает приложения в фоновом режиме.
Любые советы о том, как я могу вызвать AsyncTask, пока устройство находится в режиме ожидания (относительно правил Google о окнах обслуживания, я знаю, что в режиме ожидания Google откладывает сетевые запросы, пробуждает блокировки и т. д. Я просто хочу, чтобы сетевой запрос выполнялся, когда Гугл позволяет).