2013-06-01 63 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

相關問題