0

我有一个创建和启动服务的应用程序。然后服务创建一个线程。这个线程的作用是做一些任务,休眠5秒,然后再做任务,休眠5秒,以此类推。

我面临的问题是,有时,线程不会在 2 分钟内醒来,而不是睡 5 秒。我了解 Android 系统可以做一些高优先级的工作,这可能会导致线程唤醒延迟。有什么办法可以改进它,线程总是在 5 秒后唤醒。

服务 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();
}

提前致谢。

4

1 回答 1

0

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

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

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

于 2012-07-19T16:51:47.677 回答