随着Doze在Android和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的建议(相对于谷歌关于维护窗口的规则,我知道在Doze下,谷歌会延迟网络请求、唤醒锁等等。我只想在Google允许的时候执行网络请求)。
发布于 2018-04-05 10:51:48
结果发现这不是Doze /后台执行限制。无论是Android中存在一个bug,还是华为正在进行一些激进的任务管理,都会导致侦听器断开连接。
我添加了一些通知,在执行onDisconnected()时侦听。在我的设备(华为Mate 10 Pro)和Android8.0上,onDisconnected()在几分钟后就会被执行。然而,在运行Android7.0的平板电脑上,侦听器在长时间运行后很少会断开连接,但是它会立即自动重新绑定并执行onConnected()。
到目前为止,我还没有明确的迹象表明这是Android还是华为。
https://stackoverflow.com/questions/49622813
复制相似问题