在我的应用程序中,我每秒钟都将数据写入CSV文件。为此目的,我使用带有postAtTime的处理程序。只要屏幕打开,这就可以正常工作。数据几乎每秒钟都精确地写入。例如,数据看起来像这样(seconds.milliseconds):
- 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毫秒。如果我再次切换到应用程序或打开屏幕,延迟将再次最小化(1或2毫秒)。当应用程序在后台运行时,是否有办法避免这种延迟,或者这是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()为空。
谢谢!
错误实际上是在每次运行时获得currentTime。相反,现在我只得到currentTime一次在onCreate(),然后只是添加1000ms周期到runAtTime。
在onCreate ()this.runAtTimeRefresh = SystemClock.uptimeMillis();
run ()
runAtTime += 1000;
writeToCSV();
csvHandler.postAtTime(this, runAtTime);