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()
,但沒有運氣。
任何人都可以請建議我如何解決它?任何幫助,將不勝感激!
如果我們不知道爲什麼首先使用Thread.sleep(),很難提出更好的解決方案。 –
@KevinKrumwiede事實上,我在UI中有一個速度控制來改變'waitTime'。較大的'waitTime',較慢的線程必須睡眠。 – anticafe
是否確定它不是您的publishProgress(i)調用,因爲您正在計算這些額外的時間。 – Kuffs