44

10 分ごとにオーディオを録音する Android アプリケーションを作成しています。そのためにタイマーを使用しています。しかし、schedule と scheduleAtFixedRate の違いは何ですか? どちらを使用してもパフォーマンス上の利点はありますか?

4

4 に答える 4

96

違いは、次の Android 以外のドキュメントで最もよく説明されています。

固定レート タイマー ( scheduleAtFixedRate()) は開始時刻に基づいています (したがって、各反復は で実行されますstartTime + iterationNumber * delayTime)。

固定レートの実行では、各実行は、最初の実行のスケジュールされた実行時間に対して相対的にスケジュールされます。なんらかの理由 (ガベージ コレクションやその他のバックグラウンド アクティビティなど) で実行が遅延した場合、「追いつく」ために 2 つ以上の実行が立て続けに発生します。

固定遅延タイマー ( schedule()) は、前回の実行に基づいています (したがって、各反復は で実行されますlastExecutionTime + delayTime)。

固定遅延実行では、各実行は、前の実行の実際の実行時間に対して相対的にスケジュールされます。なんらかの理由 (ガベージ コレクションやその他のバックグラウンド アクティビティなど) で実行が遅れると、その後の実行も遅れます。

これを除けば、違いはありません。大幅なパフォーマンスの違いも見つかりません。

他の何かとの同期を維持したい場合にこれを使用している場合は、 を使用することをお勧めしますscheduleAtFixedRate()。からの遅延により、schedule()ドリフトしてエラーが発生する可能性があります。

于 2012-10-02T04:48:24.697 に答える
21

単純なメソッドは、メソッドが特定の時間間隔で何度も何度もタスクを繰り返すための特別なパラメーターを取得schedule()している間、一度に実行されます。scheduleAtFixedRate()

構文を見て:

Timer timer = new Timer(); 
timer.schedule( new performClass(), 30000 );

これは、30 秒の時間間隔が終了した後に 1 回実行されます。タイムオプトアクションの一種。

Timer timer = new Timer(); 
//timer.schedule(task, delay, period)
//timer.schedule( new performClass(), 1000, 30000 );
// or you can write in another way
//timer.scheduleAtFixedRate(task, delay, period);
timer.scheduleAtFixedRate( new performClass(), 1000, 30000 );

これは 1 秒後に開始され、30 秒ごとに繰り返されます。

于 2012-10-02T04:43:49.583 に答える
-1

スケジュールの場合、適切な時刻になったときに 1 回だけ実行されます。一方、scheduleAtFixedRateには、後続の実行間のミリ秒単位の時間を含む追加のパラメーターperiodがあります。

詳細はこちら

http://developer.android.com/reference/java/util/Timer.html#schedule(java.util.TimerTask , long)

于 2012-10-02T04:44:41.690 に答える