0

私は1分ごとにサーバーにデバイスの場所を送信しているアプリケーションを開発しています。私はここでハンドラを使用して自分の仕事をスケジュールしています。ユーザーがSTOPボタンをクリックすると、ハンドラはその実行を停止する必要があります。私はこれを達成することができません。以下の私のコードを見つけてください。間隔(1分)で実行中のハンドラを停止する方法はありますか?

public void callSpecficTime() { 

    timer = new Timer(); 
    doAsynchronousTask = new TimerTask() { 
     @Override 
     public void run() { 

      handler.post(new Runnable() { 
       public void run() { 
        try { 
         Log.e("TImeOnSchedule", String.valueOf(inTime)); 
         if(inTime==5) 
         { 
          new PostDataAsyncTask().execute(); 
         } 


        } catch (Exception e) { 
         // TODO Auto-generated catch block 
        } 
       } 
      }); 
     } 
    }; 
    timer.schedule(doAsynchronousTask, 0, 60000); 
} 

StopTaskコード:

public void stopTask(){ 

    if(doAsynchronousTask!=null){ 
     Log.d("TIMER", "timer canceled"); 
     handler.removeCallbacks(doAsynchronousTask); 
    // timer.cancel(); 
     doAsynchronousTask.cancel(); 
    } 

} 

は私がstopServiceremoveCallbacksを試してみましたが、それはうまくいきませんでした。誰も私のためにこれのためのソリューションを提供できますか?

を更新し
public void onClickButton(View v) 
{ 
    if(v.getId()==R.id.IBstart) 
    { 
     callAsynchronousTask(); 
     callSpecficTime(); 
    } 
    else if(v.getId()==R.idIBstop) 
    { 
     stopTask(); 
    } 
} 

これは私が2倍のデータを掲載しています** callAsynchronousTask()**

public void callAsynchronousTask() { 
    new PostDataAsyncTask().execute(); 
} 

です。最初にユーザーがのSTARTボタンをクリックした後、1分ごとに実行するタイマーを開始します。

答えて

0

purge()の後にcancel()の後に;

public void stopTask(){ 

    if(doAsynchronousTask!=null){ 
     Log.d("TIMER", "timer canceled"); 
     handler.removeCallbacks(doAsynchronousTask); 
    // timer.cancel(); 
     doAsynchronousTask.cancel(); 
     doAsynchronousTask.purge(); 
    } 

} 
+0

time.purge()right?私はそれをしました。まだ問題は同じです。 は私が... null'なので –

0
  1. あなたはで最初にTimerTaskをを停止する必要があります:Timer.Cancel()Timer.Purge()
  2. handler.removeCallbacks(doAsynchronousTask);からremoveCallbacksAndMessages(null)に変更できます。

編集:あなたのスケジュールコードで

ルック:timer.schedule(doAsynchronousTask, 0, 60000); - >あなたのtaskがすぐに開始し、60年代の後に、それを繰り返しを意味します。
リスナーonClickButtonが表示されたらすぐに実行される2つのタスクがあります。その結果、実行されているタスクを取り消すことはできません。それを避けるには、timer.schedule(doAsynchronousTask, 60000, 60000);

+0

私が試した ''としてdoAsynchronoursTask'を取得していますまだそれが実行されている... 'ます。public void stopTask(){ timer.cancel(); timer.purge(); //新しいPostDataAsyncTask()。cancel(true); handler.removeCallbacksAndMessages(null); } –

+0

ここで、callSpecficTime()を呼び出していますか? –

+0

ユーザーがUI内の** START **ボタンをクリックすると、 –

関連する問題