2012-12-07 111 views
1

我想我的程序在等待我,而10S真實的,但它不工作 我試圖用Thread.sleep(10000);但它不是10秒等待時間 - Android電子

while (true) { 
    for (int i = 0; i < 2; i++) { 
     for (int j = 0; j < 5; j++) { 
      if (matrixVacancy[i][j] == 1) { 
       completeParking(i, j, R.color.vaga_ocupada); 
      } else { 
       completeParking(i, j, R.color.cor_chao); 
      } 
     } 
    } 
    try { 
     Thread.sleep(10000); 
    } catch (InterruptedException ex) { 
    } 

    int a, b, c, d, e, f, g, h, i; 

    a = (int) (Math.random() * 2); // indice i 
    b = (int) (Math.random() * 5); // indice j 
    c = (int) (Math.random() * 2); // tem ou nao carro 

    d = (int) (Math.random() * 2); // indice i 
    e = (int) (Math.random() * 5); // indice j 
    f = (int) (Math.random() * 2); // tem ou nao carro 

    g = (int) (Math.random() * 2); // indice i 
    h = (int) (Math.random() * 5); // indice j 
    i = (int) (Math.random() * 2); // tem ou nao carro 

    matrixVacancy[a][b] = c; 
    matrixVacancy[d][e] = f; 
    matrixVacancy[g][h] = i; 
} 

我該怎麼辦呢?對於我而言,等10秒?

+2

什麼時候你想讓你的功能等待?請更多的背景。 – stealthjong

+0

準確地說你是如何做到的。它怎麼不起作用?如果您的應用停止響應一段時間,Android會提供您強制關閉它。也許你應該在單獨的(非UI)線程上運行該循環? – nullpotent

+1

嘗試使用CountDownTimer或簡單的計時器爲此https://developer.android.com/reference/android/os/CountDownTimer.html https://developer.android.com/reference/java/util/Timer.html –

回答

12

取決於你試圖睡覺的線程。你也可以把你的方法放在一個單獨的線程中,並在那裏做你的方法。這樣,你的應用程序將不會掛/休眠

private class TimeoutOperation extends AsyncTask<String, Void, Void>{ 

    @Override 
    protected Void doInBackground(String... params) { 

     try { 
      Log.i(TAG, "Going to sleep"); 
      Thread.sleep(10000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) { 
     Log.i(TAG, "This is executed after 10 seconds and runs on the main thread"); 
     //Update your layout here 
     super.onPostExecute(result); 
    } 
} 

要運行這個操作使用

new TimeoutOperation().execute(""); 
+0

我不能這樣做在其他線程,因爲我的函數completeParking在LinearLayout中設置背景,並做到這一點我需要在原始線程 –

+0

重寫方法onPostExecute(Void結果)在主/ UI線程上運行! :)如果將此代碼粘貼到原始線程的類中,則可以訪問線性佈局。要運行該操作,您應該使用:new TimeoutOperation()。execute(「」); – Oritm

+0

完美!我在onPostExecute。 現在正在工作。謝謝 –

0

首先,我會斷點看看你的睡眠是否被稱爲。其次,當你捕獲InterruptException時,我會打印異常。你的睡眠是正確的,所以沒有理由不應該工作,所以無論是有人打擾你還是甚至沒有進入睡眠功能。

0

變化:

catch (InterruptedException ex) { 
    } 

到:

catch (InterruptedException ex) { 
     ex.printStackTrace(); 
    } 

檢查logcat的使確保睡眠不中斷。

另外,在調用Thread.sleep打印出已用時間之前和之後,放入一些Log語句。

Logcat是你的朋友。 :)