2013-06-01 109 views
0

我有一个Android服务在后台运行在我的应用程序中,该服务运行多个线程,其中一个线程用于运行30分钟的命令。在Android服务线程中每30分钟运行一次命令

Thread InternetThread = new Thread() { 
     public void run() { 
      while (true){ 
        try { 
         Thread.sleep(1800000); 
        } catch (InterruptedException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 
        Log.i("test", "We are running"); 
        runCommand(); 
      } 
     } 
    }; 

但是我发现这段代码不会永远运行,每30分钟,有时它可以达到运行之间的一个小时,从来没有低于30分钟,但可愈。我认为这与Android所追求的服务有关? 但我并不确定这是因为我对Android服务和线程的理解有限。

希望有人可以帮助确保“runCommand()”实际上每隔30分钟确实运行一次。

+1

3600000/1000/60 = 60分钟呢? – Zong

+0

是的我的不好应该是1800000已经写出了我使用1800000的代码并获得随机结果 –

+0

@Lestat 1800000是正确的。 – timss

回答

0

该过程可以是冷冻,尝试:

Thread InternetThread = new Thread() { 
    public void run() { 
     long endtime = 0; 
     while (true) { 
      endTime = System.currentTimeMillis() + 1800000; 
      while(System.currentTimeMillis() < endTime) { 
       try { 
        Thread.sleep(2000); 
       } catch (InterruptedException e) { 
        e.printStackTrace(); 
       } 
      } 
      Log.i("test", "We are running"); 
      runCommand(); 
      } 
     } 
    }; 
+0

如果您实现了Thread或HandlerThread,请确保您的UI线程在等待工作线程完成时不会阻塞 - 请勿调用Thread.wait()或Thread.sleep()。在线程中使用thread.sleep()是糟糕的设计。 http://developer.android.com/training/articles/perf-anr.html – Raghunandan

相关问题