Android NotificationListenerService 后台执行限制/Doze

Android NotificationListenerService Background execution limit / Doze

随着在 Android M 中引入 Doze,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。 None 它们在设备深度睡眠时工作。

附带说明一下,我的设备是华为 Mate 10 Pro。他们以积极的任务管理而闻名。但是我已经将我的应用程序列入白名单,禁用了所有可以从华为方面禁用的功能,这些功能会在后台杀死应用程序。

关于我如何在设备打瞌睡时调用 AsyncTask 的任何建议(相对于 Google 的维护规则 windows,我知道在打瞌睡 Google 下延迟网络请求,wake locks等等。我只想在Google允许的时候执行网络请求。

事实证明这不是打瞌睡/后台执行限制。 Android O 中存在错误,或者华为正在执行一些激进的任务管理,导致侦听器断开连接。

我添加了一些在执行 onDisconnected() 时侦听的通知。 在我的 Android 8.0 设备(Huawei Mate 10 Pro)上,onDisconnected() 会在几分钟后执行。然而,在我的 运行 Android 7.0 平板电脑上,监听器在长时间后断开连接的次数很少,但它会立即自动重新绑定并执行 onConnected()。

目前我还没有明确指出是Android还是华为。