Android NotificationListenerService后台执行限制/打盹

时间:2018-04-03 05:26:15

标签: android background alarmmanager notification-listener 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());
    }
  }
}

当设备进入Doze时,它会在几分钟后停止工作。 我尝试过使用AlarmManager,JobScheduler,JobIntentService和普通的IntentService。 当设备深度睡眠时,它们都不起作用。

作为旁注,我的设备是华为Mate 10 Pro。他们以积极的任务管理而闻名。但是我已经将我的应用白名单,禁用了可以从华为方面禁用的所有内容,以便在后台终止应用。

关于如何在设备打瞌睡时调用AsyncTask的任何建议(相对于Google关于维护窗口的规则,我知道在Doze Google下推迟网络请求,唤醒锁定等等。我只是想要网络请求到谷歌允许时执行。

1 个答案:

答案 0 :(得分:2)

原来这不是打盹/后台执行限制。 要么Android O中存在错误,要么华为正在进行一些积极的任务管理,这会导致监听器断开连接。

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

截至目前,我还没有明确的迹象表明它是Android还是华为。