android服务中的线程未按预期工作
我有一个创建和启动服务的应用程序。服务然后创建一个线程。线程的这个角色是执行一些任务并睡眠5秒钟,然后再次执行任务并睡眠5秒钟,依此类推 我所面临的问题是,有时候,线程不需要睡5秒钟,而需要2分钟才能醒来。我知道Android系统可以做一些高优先级的工作,这可能会导致线程唤醒延迟。如果线程总是在5秒后醒来,有什么方法可以改进它吗 服务onCreate()的代码。请注意,我正在日志文件中记录带有时间戳的“线程运行”,以计算延迟android服务中的线程未按预期工作,android,android-service,Android,Android Service,我有一个创建和启动服务的应用程序。服务然后创建一个线程。线程的这个角色是执行一些任务并睡眠5秒钟,然后再次执行任务并睡眠5秒钟,依此类推 我所面临的问题是,有时候,线程不需要睡5秒钟,而需要2分钟才能醒来。我知道Android系统可以做一些高优先级的工作,这可能会导致线程唤醒延迟。如果线程总是在5秒后醒来,有什么方法可以改进它吗 服务onCreate()的代码。请注意,我正在日志文件中记录带有时间戳的“线程运行”,以计算延迟 @Override public void onCreate() {
@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();
}
提前感谢。您的设备可能会进入睡眠状态。在这种情况下,线程不会每5秒运行一次。在设备唤醒之前,它不会再次运行 您可以通过保持设备处于唤醒状态来验证这一点(使用唤醒锁或将其插入USB电源,并在应用程序->开发人员设置中设置“插入后不睡眠”
如果你真的需要每5秒运行一次线程,那么你需要设置一个唤醒锁,确保设备没有进入睡眠状态。当然,这会耗尽电池并激怒你的用户;-)你如何估计每次睡眠之间经过的时间?我检查了日志文件,正在用这个词写时间戳“线程正在运行”您确定线程仍在运行没有崩溃或以其他方式结束吗?可能它被卡在了其他地方。您的用例实际上是每5秒包含一个事件,还是您使用了很短的时间进行调试?您希望实际应用程序的周期时间有多长?