[英]Doze mode suspends foreground service
我正在编写一个数据记录器应用程序,我需要每隔5分钟做一次http请求。 用户知道电池耗尽,这对我来说没问题。 我正在使用具有相应通知的前台服务,我有一个处理程序线程,我每5分钟发布一次可运行的任务。 似乎当手机进入DOZE MODE时,线程被暂停并且没有执行可运行的操作。 这是正常的行为还是我错过了什么? 任何有关如何做到这一点的帮助将不胜感激。
启动线程的服务代码:
private void startTheForegroundService() {
NotificationCompat.Builder builder = new NotificationCompat.Builder(MainService.this);
builder.setPriority(Notification.PRIORITY_HIGH);
startForeground(1000, builder.build());
httpThread = new HttpThread("Ping Thread", Thread.NORM_PRIORITY);
httpThread.start();
httpThread.loop();
}
线程代码:
public class HttpThread extends HandlerThread {
public Handler mHandler;
public HttpThread(String name, int priority) {
super(name, priority);
}
public synchronized void waitUntilReady() {
mHandler = new Handler(getLooper(), new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
return false;
}
});
}
public void loop() {
waitUntilReady();
mHandler.post(new Runnable(){
@Override
public void run() {
//code for the http request.
}
});
}
}
这是正常的行为吗?
是的,对于Android 6.0中的打盹模式,当应用程序静止一小时左右时触发。 M Developer Preview扩展了Doze模式,即使在设备移动时它也会部分触发,但我认为在这种情况下你的场景会继续工作。
用户知道电池消耗
用户可以将您添加到电池优化白名单(设置>应用>(齿轮图标)>电池优化)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.