web-dev-qa-db-ja.com

Androidでタイマーを停止する方法は?

特定の期間に特定の番号にメッセージを送信するアプリケーションを開発しています。 問題は、その期間後にそのメッセージを送信し続けることです。そのメッセージの送信を停止するために、特定の時間後にタイマーを停止するにはどうすればよいですか?

34
Krishna
     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;
     }
66
ice911

そして.. GCに対して「waitTimer.purge()」を呼び出す必要があります。タイマーを使用しない場合は、「purge()」!! 「purge()」は、キャンセルされたすべてのタスクをタスクキューから削除します。

if(waitTimer != null) {
   waitTimer.cancel();
   waitTimer.purge();
   waitTimer = null;
}
21
cmcromance

Java.util.timerでは、 .cancel() を使用してタイマーを停止し、保留中のタスクをすべてクリアできます。

9
Peter Knego

タイマーをスケジュールして作業を行うことができます。時間の終了後、メッセージは送信されません。

これがコードです。

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();
5
SithuSena

同様の問題がありました。特定のボタンを押すたびに、新しいタイマーが作成されます。

_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() {
...
}
}
_
2

私は同様の問題を抱えていましたが、それはタイマーの初期化の配置が原因でした。

頻繁に呼び出されるメソッドに配置されました。

これを試して:

Timer waitTimer;

  void exampleMethod() {

   if (waitTimer == null ) {
    //initialize your Timer here
    ...
   }

「cancel()」メソッドは、最新のタイマーのみをキャンセルしました。古いものは無視され、実行を停止しませんでした。

1
dkdoemk43

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.

http://developer.Android.com/reference/Java/util/Timer.html

1
dongshengcn