2013-08-29 42 views
0

我願做這樣的事情:如何在一段時間後做某事?

@Override 
protected String doInBackground(Object... params) {  
    int i = 0; 
    int max = Integer.MAX_VALUE; 
    GPSTracker gps = new GPSTracker(context); 
    do 
    { 
     //Something 

    } while(10 seconds); 

    return null; 

} 

如何把計數時間在一段時間statemente。我想在10秒內完成。

回答

2

要延遲執行,可以sleep線程:

Thread.sleep(timeInMills); 

這條線可能拋出線程異常,它不應該在主UI線程上執行,因爲它會導致應用程序停止通信與Android,導致ANR

要在單個活動的後臺運行進程,您應該生成一個新的Thread

new Thread(){ 
    public void run(){ 
     //Process Stuff 
    } 
}.start(); 

如果你想擁有整個應用程序的整個生命,當它被隱藏到用戶,包括代碼運行的這一部分,你應該考慮運行長壽命任務的服務。

+0

任何不使用服務呢? –

+1

'睡眠',對不起,不在IDE中,並且不記得該呼叫。 :D –

0

一個方便的替代

Thread.sleep(timeInMillis) 

TimeUnit.SECONDS.sleep(10) 

然後單位更明確,更容易推理。

請注意,這兩種方法都會拋出InterruptedException,您將不得不處理這些異常。你可以瞭解更多關於here。如果,這是常有的情況下,你不希望使用中斷,你不希望你的代碼用try/catch塊被雜亂,Google Guava's Uninterruptibles都能得心應手:

Uninterruptibles.sleepUninterruptibly(10, TimeUnit.SECONDS); 
0

您可以使用線程。睡覺(); (不是很乾淨)。

更好地使用Handler來做到這一點。

例:

new Handler().postDelayed(new Runnable() { 

       @Override 
       public void run() { 
        // You code here 
       } 

      }, 775); // Time in millis 
+0

我有一個第二個線程,我在AsysncTask類中完成它。我想在幾秒鐘後停止一段時間,然後(在10秒後);' { } – Roland

+0

這是從圖書館借閱的嗎? –

+0

不,它來自我正在做的一個應用程序。我想繼續做下去,直到10秒結束。 – Roland

0

我做到了:

long start = System.currentTimeMillis(); 
long end = start + 60*1000; // 60 seconds * 1000 ms/sec 
while (System.currentTimeMillis() < end) 
{ 
    // run 
} 

感謝您對所有的答案。

相關問題