в моем приложении Я записываю данные в 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 имеет тип ком. opencsv.CSVWriter.CSVWriter.
onPause() и onStop() пусты.
Спасибо!