編輯:的Android了Thread.sleep有時等待的時間太長了
這不是在談論精度問題,從代碼和下面登錄,你可以看到,我要求睡1秒,但結果卻是幾乎200秒,有時它可以跳轉到600秒,這不可能是精確的問題..
我用handlerthread之前,有時張貼到剛剛處理程序作業不按時啓動,以獲得更多的細節我將其更改爲基本線程,結果發現Thread.sleep()是問題,但我不確定如何解決此問題,可能的原因是什麼?
hGpsThread = new Thread(mGpsWorker);
hGpsThread.start();
private final Runnable mGpsWorker = new Runnable() {
@Override
public void run() {
long lastGpsRequestTime = 0;
l.Write("GPS thread started.");
while (isRunning) {
l.Write("GPS thread loop start.");
try {
long currentTimeMillis = System.currentTimeMillis();
if (currentTimeMillis >= lastGpsRequestTime + gpsUpdateInterval) {
l.Write("Requesting location update");
gpslib.getLocation();
lastGpsRequestTime = currentTimeMillis;
}
l.Write("GPS thread before sleep");
Thread.sleep(1000);
l.Write("GPS thread after sleep");
} catch (InterruptedException e) {
}
l.Write("GPS thread loop end.");
}
l.Write("GPS thread ended.");
}
};
注:的getLocation()調用使用來自另一個線程活套requestLocationUpdates,所以位置更新不應該影響這個線程,因爲我明白了。
getLocation()也創建一個Timer並計劃超時,這可能是問題嗎?據我瞭解這不應該是一個問題。
這是日誌(這只是偶爾發生,說的機會是接近0.5%)
Wed Jul 10 11:45:46 AEST 2013 GPS thread loop start.
Wed Jul 10 11:45:46 AEST 2013 GPS thread before sleep
Wed Jul 10 11:49:04 AEST 2013 GPS thread after sleep
Wed Jul 10 11:49:04 AEST 2013 GPS thread loop end.
感謝
測試環境爲:HTC詠歎調,Android 2.2的 而外觀像它只在使用電池運行時發生,但我的應用程序在充電狀態上行爲不同。
在Windows PC上我的問題,當您註釋掉'的getLocation()'它確實發生?看起來像另一個線程不會放棄CPU,一旦這個線程進入睡眠狀態。 – Aert
@Aert,謝謝,我正在監視CPU使用情況,如果我發現了什麼,我會更新問題,謝謝。 – agou
您是否在通過電源按鈕關閉Android顯示屏或顯示超時後執行此操作? –