随着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下推迟网络请求,唤醒锁定等等。我只是想要网络请求到谷歌允许时执行。
答案 0 :(得分:2)
原来这不是打盹/后台执行限制。 要么Android O中存在错误,要么华为正在进行一些积极的任务管理,这会导致监听器断开连接。
我添加了一些在onDisconnected()执行时监听的通知。 在配备Android 8.0的设备(华为Mate 10 Pro)上,onDisconnected()会在几分钟后执行。但是在运行Android 7.0的平板电脑上,监听器在长时间内断开连接很少次,但它会立即自动重新绑定并且onConnected()会被执行。
截至目前,我还没有明确的迹象表明它是Android还是华为。