3

私は擬似コードでTimer&TimerTaskを使用しています:-

 samplingTask = new TimerTask() {

   public void run() {
     collectSample();
   }

 };

 timer.schedule(samplingTask, 60*1000, 60*1000); //1 min

このアプリケーションは長時間実行されるアプリです(たとえば、ウェイクロックなしで15分、画面がオフになっている場合など)。このタスクをスケジュールした後、画面をロックすると、電話が動いています(加速度計のセンサーマネージャーがアクティブになっています)。したがって、理想的には、このタスクは1分ごとに実行する必要があります。ただし、ログでは、スケジュールされたタイマーが5分、9分、および12分にのみ実行されたことがわかります。

FINER: (13,Timer-0,Workout)In Timertask, nth minute=5
FINER: (13,Timer-0,Workout)In Timertask, nth minute=9
FINER: (13,Timer-0,Workout)In Timertask, nth minute=12

私の要件には、許容可能な遅延範囲が数秒(1〜5秒)のタイムクリティカルなサンプリングがあります。デバイスがスリープモードの場合、タイマーはデバイスをウェイクアップしてスケジュールされたタスクを実行しないようです。これに代わるものはありますか?ドキュメントによると、AlarmManagerとHandlerを使用できます。理想的には、AlarmManagerを使用して、システムアラームに基づいたシングルショットタスクを実行する必要があると思います。私が欠けているもの、またはこの機能を実現するための代替手段はありますか?

4

1 に答える 1

0

使用できますAlarmManager-デバイスを弱体化させ、いくつかのタスクを繰り返し実行する機会があります。

正確にはわかりませんが、ユーザーが画面をオフにすると、デバイスがスリープしている間、すべてのタスクが一時停止し、コードを実行できないとします。

于 2012-01-12T06:53:26.460 に答える