Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
android服务中的线程未按预期工作_Android_Android Service - Fatal编程技术网

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

android服务中的线程未按预期工作,android,android-service,Android,Android Service,我有一个创建和启动服务的应用程序。服务然后创建一个线程。线程的这个角色是执行一些任务并睡眠5秒钟,然后再次执行任务并睡眠5秒钟,依此类推 我所面临的问题是,有时候,线程不需要睡5秒钟,而需要2分钟才能醒来。我知道Android系统可以做一些高优先级的工作,这可能会导致线程唤醒延迟。如果线程总是在5秒后醒来,有什么方法可以改进它吗 服务onCreate()的代码。请注意,我正在日志文件中记录带有时间戳的“线程运行”,以计算延迟 @Override public void onCreate() {

我有一个创建和启动服务的应用程序。服务然后创建一个线程。线程的这个角色是执行一些任务并睡眠5秒钟,然后再次执行任务并睡眠5秒钟,依此类推

我所面临的问题是,有时候,线程不需要睡5秒钟,而需要2分钟才能醒来。我知道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();
}

提前感谢。

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

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


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

你如何估计每次睡眠之间经过的时间?我检查了日志文件,正在用这个词写时间戳“线程正在运行”您确定线程仍在运行没有崩溃或以其他方式结束吗?可能它被卡在了其他地方。您的用例实际上是每5秒包含一个事件,还是您使用了很短的时间进行调试?您希望实际应用程序的周期时间有多长?