特定の期間に特定の番号にメッセージを送信するアプリケーションを開発しています。 問題は、その期間後にそのメッセージを送信し続けることです。そのメッセージの送信を停止するために、特定の時間後にタイマーを停止するにはどうすればよいですか?
CountDownTimer waitTimer;
waitTimer = new CountDownTimer(60000, 300) {
public void onTick(long millisUntilFinished) {
//called every 300 milliseconds, which could be used to
//send messages or some other action
}
public void onFinish() {
//After 60000 milliseconds (60 sec) finish current
//if you would like to execute something when time finishes
}
}.start();
タイマーを早期に停止するには:
if(waitTimer != null) {
waitTimer.cancel();
waitTimer = null;
}
そして.. GCに対して「waitTimer.purge()」を呼び出す必要があります。タイマーを使用しない場合は、「purge()」!! 「purge()」は、キャンセルされたすべてのタスクをタスクキューから削除します。
if(waitTimer != null) {
waitTimer.cancel();
waitTimer.purge();
waitTimer = null;
}
Java.util.timerでは、 .cancel()
を使用してタイマーを停止し、保留中のタスクをすべてクリアできます。
タイマーをスケジュールして作業を行うことができます。時間の終了後、メッセージは送信されません。
これがコードです。
Timer timer=new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
//here you can write the code for send the message
}
}, 10, 60000);
ここで呼び出しているメソッドは、
public void scheduleAtFixedRate(TimerTaskタスク、長い遅延、長い期間)
ここに、
task:スケジュールするタスク
delay:最初の実行までの時間(ミリ秒)。
period:後続の実行間のミリ秒単位の時間。
詳細については、以下を参照してください。 Android Developer
タイマーを停止するには、次を呼び出します。
timer.cancel();
同様の問題がありました。特定のボタンを押すたびに、新しいタイマーが作成されます。
_my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
_
そのアクティビティを終了して、タイマーを削除しました。
_if(my_timer!=null){
my_timer.cancel();
my_timer = null;
}
_
しかし、cancel()
メソッドは最新のタイマーをキャンセルするだけなので、十分ではありません。古いものは無視され、実行を停止しませんでした。 purge()
メソッドは役に立たなかった。 Timer
のインスタンス化を確認するだけで問題を解決しました。
_if(my_timer == null){
my_timer = new Timer("MY_TIMER");
my_timer.schedule(new TimerTask() {
...
}
}
_
私は同様の問題を抱えていましたが、それはタイマーの初期化の配置が原因でした。
頻繁に呼び出されるメソッドに配置されました。
これを試して:
Timer waitTimer;
void exampleMethod() {
if (waitTimer == null ) {
//initialize your Timer here
...
}
「cancel()」メソッドは、最新のタイマーのみをキャンセルしました。古いものは無視され、実行を停止しませんでした。
Timer()はAndroidでは利用できないと言いますか?この記事は役に立つかもしれません。
http://developer.Android.com/resources/articles/timed-ui-updates.html
私は間違っていた。 Timer()が利用可能です。あなたはそれをワンショット操作のように実装しているようです:
schedule(TimerTask task, Date when) // Schedule a task for single execution.
または、最初の実行後にキャンセルします。
cancel() // Cancels the Timer and all scheduled tasks.