在我的應用程序我每秒將數據寫入CSV文件。爲此,我正在使用帶有postAtTime的處理程序。只要屏幕處於打開狀態,此工作正常。數據幾乎每秒都會被寫入。例如,數據看起來像這樣(seconds.milliseconds):Android應用程序時間延遲當應用程序在後臺運行
- 24.288
- 25.293
- 26.293
- 27.293
- 28.298
- 28.296
正如你所看到的,差異總是一秒加幾毫秒,這非常好。
不過,如果你關閉屏幕或者回到主屏幕(每次的onPause()被調用)處理程序仍在運行,但有更顯著延遲:
- 30.610
- 31.651
- 32.690
- 33.715
- 34.751
- 35.791
這次延時大概是40毫秒。 如果我再次切換到應用程序或重新打開屏幕,則延遲時間會再次縮短(一個或兩個毫秒)。 當應用程序在後臺運行或者這是一個android限制時,有沒有辦法避免這種延遲? 比使用處理程序有更好/更精確的可能性嗎?
這是的onResume()方法的代碼:
try {
this.csvHandler.removeCallbacksAndMessages(null);
} catch (Exception e1) {
}
this.csvHandler = new Handler();
this.csvHandler.postDelayed(new Runnable() {
@Override
public void run() {
long currentTime = SystemClock.uptimeMillis();
if (currentTime > runAtTime) {
calendar = GregorianCalendar.getInstance();
runAtTime = currentTime + 1000;
writeToCSV();
}
csvHandler.postAtTime(this, runAtTime);
}
}, 0);
runAtTime已經0
writeToCSV方法初始化:
String[] data = {this.simpleDateFormatCSV.format(this.calendar.getTime())};
this.csvWriter.writeNext(data);
的csvWriter是輸入com的。 opencsv.CSVWriter.CSVWriter。
onPause()和onStop()是空的。
謝謝!