我有一个创建和启动服务的应用程序。然后服务创建一个线程。线程的这个角色是做一些任务并睡5秒然后再做一次任务,睡5秒钟等等。
我面临的问题是,有时候,线程不会在5秒钟内休眠,而是长达2分钟不会被唤醒。我知道Android系统可以做一些高优先级的工作,这可能会导致线程唤醒延迟。有什么方法可以在5秒后线程总是醒来的时候改进它。
服务onCreate()的代码。请注意,我在日志文件中记录带有时间戳的“Thread Running”以计算延迟。
@Override
public void onCreate() {
logger.Log("MTrackService::onCreate()");
thMain = new Thread(new Runnable() {
public void run() {
while(running) {
logger.Log("Thread Running");
try {
//Do Stuff
Thread.sleep(5*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
running = false;
}
}
}
});
thMain.start();
}
提前致谢。
答案 0 :(得分:0)
您的设备很可能会睡觉。在这种情况下,您的线程不会每5秒运行一次。在设备唤醒之前它不会再次运行。
您可以通过保持设备唤醒来验证这一点(使用唤醒锁或将其插入USB电源并在应用程序 - >开发人员设置中设置“请勿插入”设置。
如果你真的需要每5秒运行一次你的线程,那么你需要获得一个唤醒锁并确保设备不会进入睡眠状态。当然,这会耗尽电池并使用户感到不适; - )