1

随着 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 会延迟网络请求、唤醒锁等。我只希望在何时执行网络请求谷歌允许)。

4

1 回答 1

2

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

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

目前还不清楚是安卓还是华为。

于 2018-04-05T10:51:48.603 回答