Android NotificationListenerService Ограничение фонового выполнения / Doze

С введением 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 откладывает сетевые запросы, пробуждает блокировки и т. д. Я просто хочу, чтобы сетевой запрос выполнялся, когда Гугл позволяет).


person AndroidCoder    schedule 03.04.2018    source источник


Ответы (1)


Оказывается, это не ограничения на выполнение Doze/Background. Либо в Android O есть ошибка, либо Huawei использует агрессивное управление задачами, что приводит к отключению прослушивателя.

Я добавил некоторое уведомление, которое слушает, когда выполняется onDisconnected(). А на моем устройстве (Huawei Mate 10 Pro) с Android 8.0 onDisconnected() выполняется через пару минут. Однако на моем планшете под управлением Android 7.0 прослушиватель очень редко отключается после длительных периодов времени, однако он мгновенно автоматически переустанавливается, и onConnected() выполняется.

На данный момент у меня нет четкого указания, Android это или Huawei.

person AndroidCoder    schedule 05.04.2018