我用Handler每10秒发送一次消息。当我关闭屏幕(设备进入睡眠模式)时,问题就会发生。每30秒-2分钟发送一次消息,而不是每10秒发送一次.为什么会发生这种情况?如何解决这个问题?
public void PingTask() {
handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
try {
sendMSG("ping");
} catch (Exception e) {}
handler.postDelayed(this, 10000);
}
};
runnable.run();
}
PingTask()从AsyncTask - onPostExecute()调用。
发布于 2013-12-06 00:41:05
Android正在关闭你的CPU。使用WakeLock可以防止设备进入某种睡眠模式。
您还可以使用警报管理器每秒钟发送一条消息。警报管理器自动防止设备进入睡眠模式。
发布于 2015-04-08 21:52:48
我还看到了同样的情况,无论是处理程序还是计时器都没有给我一个准确的延迟,例如,延迟6000毫秒将给我在500到7000毫秒之间的延迟,这是非常恼人的。
使用尾流锁可能需要太多的电池。因此,这里我有一个助手类,它应该运行的时间,而不是使用postAtTime,并重新发布本身。它可以方便地在可变间隔内处理更复杂的不同任务的调度。
public void PingTask() {
/** here is how to use it */
IntervalTask task = new IntervalTask();
task.run();
}
class IntervalTask implements Runnable{
long runAtTime = 0;
Handler handler = new Handler();
public void run(){
/** According to documentation, it uses uptimeMillis */
long currentTime = SystemClock.uptimeMillis();
/** only do it if it is time */
if (currentTime > runAtTime){
/** update it */
runAtTime = currentTime + 10000;
/** do you what you want to do here */
sendMSG("ping");
}
handler.postAtTime(this, runAtTime);
}
}
https://stackoverflow.com/questions/20413598
复制相似问题