在我的应用中,我每秒都会将数据写入CSV文件。为此,我正在使用带有postAtTime的Handler。只要屏幕打开,这样就可以正常工作。几乎每秒都会写入数据。例如,数据看起来像这样(seconds.milliseconds):
正如你所看到的,差异总是第二加上几毫秒就完全没问题了。
但是,如果关闭屏幕或返回主屏幕(每次调用onPause()时)处理程序仍在运行,但延迟时间更长:
这次延迟大约是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()为空。
谢谢!
答案 0 :(得分:0)
实际上错误是每次运行都获得当前时间。相反,现在我只在onCreate()中获取currentTime一次,然后只将1000ms周期添加到runAtTime。
onCreate()中的
this.runAtTimeRefresh = SystemClock.uptimeMillis();
run()
runAtTime += 1000;
writeToCSV();
csvHandler.postAtTime(this, runAtTime);