android服务中的线程不能按预期工作

时间:2012-07-13 08:14:09

标签: android android-service

我有一个创建和启动服务的应用程序。然后服务创建一个线程。线程的这个角色是做一些任务并睡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();
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的设备很可能会睡觉。在这种情况下,您的线程不会每5秒运行一次。在设备唤醒之前它不会再次运行。

您可以通过保持设备唤醒来验证这一点(使用唤醒锁或将其插入USB电源并在应用程序 - >开发人员设置中设置“请勿插入”设置。

如果你真的需要每5秒运行一次你的线程,那么你需要获得一个唤醒锁并确保设备不会进入睡眠状态。当然,这会耗尽电池并使用户感到不适; - )