2015-11-27 65 views
0

我寫一個簡單的AsyncTask其中:調用Thread.sleep()方法中的AsyncTask doInBackground時間比預期要

@Override 
    protected Void doInBackground(Void... params) { 
    for (int i = 0; i <= 99; i++) { 
     long time = System.currentTimeMillis(); 
     try { 
      //Wait for 6ms 
      Thread.sleep(6); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
     long diff = System.currentTimeMillis() - time; 
     Log.d(TAG, "Row "i + " is DONE with timeDiff=" + diff + "ms vs. waitTime=" + waitTime + "ms"); 
     publishProgress(i); 
    } 
} 

它運作良好,在一些測試設備,直到我嘗試LG設備(的Nexus 4,G3) :睡覺的時間似乎比我想象的要長。在檢查日誌後,我發現在正常情況下,timeDiff是6ms或7ms;而在LG設備中,timeDiff大多> 40毫秒。

也嘗試使用SystemClock.sleep(),但沒有運氣。

任何人都可以請建議我如何解決它?任何幫助,將不勝感激!

+2

如果我們不知道爲什麼首先使用Thread.sleep(),很難提出更好的解決方案。 –

+0

@KevinKrumwiede事實上,我在UI中有一個速度控制來改變'waitTime'。較大的'waitTime',較慢的線程必須睡眠。 – anticafe

+0

是否確定它不是您的publishProgress(i)調用,因爲您正在計算這些額外的時間。 – Kuffs

回答

1

備用解決方案是使用Handler進行等待。

Handler handler = new Handler(); 
handler.postDelayed(new Runnable() { 
    public void run() { 
      //call after delay 

    } 
}, 2000); 
相關問題