私のアプリでは毎秒CSVファイルにデータを書き込みます。私は、この目的のためにpostAtTimeを持つHandlerを使用しています。これは、画面が表示されている限り正常に動作します。データはほぼ毎秒書き込まれます。例えば、データは、この(秒。ミリ秒)のようになります。アプリがバックグラウンドで実行されるとAndroidハンドラのタイミングが遅れる
- 24.288
- 25.293
- 26.293
- 27.293
- 28.298
- 28.296
あなたが見ることができるように、差は常に2番目にプラス数ミリ秒であり、これは完全に良好です。
しかし、あなたは画面をオフにした場合か、ホーム画面に戻ります(毎回onPause()と呼ばれている)ハンドラはまだなく、より大幅な遅延と、実行されている:
- 30.610
- 31.651
- 32.690
- 33.715
- 34.751
- 35.791
今回は遅延が約40msです。 もう一度アプリに切り替えたり、画面を戻したりすると、遅延は最小限に抑えられます(1〜2 ms)。 アプリがバックグラウンドで実行されているとき、またはAndroidの制限があるときに、この遅延を回避する手段はありますか? ハンドラを使用するよりもより正確な可能性がありますか?
これはonResume()メソッドのコードである:
String[] data = {this.simpleDateFormatCSV.format(this.calendar.getTime())};
this.csvWriter.writeNext(data);
csvWriterタイプCOMのである:
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方法で初期化されています。 opencsv.CSVWriter.CSVWriter。
onPause()およびonStop()は空です。
ありがとうございます!