随着 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。当设备深度睡眠时,它们都不起作用。
附带说明一下,我的设备是华为 Mate 10 Pro。他们以积极的任务管理而闻名。但是我已将我的应用程序列入白名单,禁用了所有可以从华为方面禁用的东西,这会在后台杀死应用程序。
关于在设备打瞌睡时如何调用 AsyncTask 的任何建议(相对于 Google 关于维护窗口的规则,我知道在打瞌睡下 Google 会延迟网络请求、唤醒锁等。我只希望在何时执行网络请求谷歌允许)。