私は、X秒ごとにメソッドを実行するScheduled Execution Serviceを持っています。実行遅延の残りの時間をスキップしてメソッドをすぐに呼び出すようにスケジュール実行サービスを強制できるメソッドを持つことは可能ですか?それとも単に停止してすぐに再起動できますか?現在の実行遅延をスキップするか、即時実行サービスを再起動できますか?
は、ここに私のコードです:
ここRunnable runnable = new Runnable() {
public void run() {
callTheFunction();
}
};
ScheduledExecutorService executor;
executor = Executors.newScheduledThreadPool(1);
executor.scheduleAtFixedRate(Runnable, 0, 5, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat
public void restartTheExecutor() {
// code to restart it or skip the remaining time.
}
で私の更新とコードの作業、それは偽の最初の実行に設定されなければならないパラメータのブール値が含まれています。
public void restartExecutor(View v, boolean stopRequiered) {
if (stopRequiered) {
scheduled.cancel(true);
}
Runnable runnable = new Runnable() {
public void run() {
nextExpression();
}
};
ScheduledExecutorService executor;
executor = Executors.newScheduledThreadPool(1);
scheduled = executor.scheduleAtFixedRate(runnable, 0, 3, TimeUnit.SECONDS); // 0 sec delay | 5 sec repeat
}
おかげで、 – james
は私がにして実行している完璧に動作しますエラーのビット、私は関数であなたのコードを実行し、それは一度だけ実行し、停止します。 – james
@james:私が書いたように、 'cancel()'は次の実行だけでなく将来のすべての実行をキャンセルするので、再度スケジュールを変更する必要があります。完全な答えを見てください(そして私は別の解決策で更新しました)。 –