0

Her dakika için cihaz konumunu sunucuya gönderdiğim bir uygulama geliştiriyorum. Görevimi planlamak için Handler'ı kullanıyorum. Kullanıcı STOP düğmesini tıkladıktan sonra, işleyici yürütmeyi durdurmalıdır. Bunu başaramıyorum. Lütfen aşağıda benim kodumu bulun.Aralıklı çalışan işleyici nasıl durdurulur (1 dak)?

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 kodu:

public void stopTask(){ 

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

} 

Ben stopService, removeCallbacks denedik ama işe yaramadı. Herkes bana bunun için çözüm sağlayabilir mi?

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

GÜNCELLEME Bu iki kere ** callAsynchronousTask() **

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

I am posta veridir. İlk kez Kullanıcı START düğmesini tıklattığında ve sonra her bir dakika için yürütmek için zamanlayıcıyı başlatıyorum. cancel() sonra

cevap

0

kullanımı purge(); Timer.Cancel() ve Timer.Purge():

public void stopTask(){ 

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

} 
+0

time.purge() değil mi? Ben bunu yaptım. Hala sorun aynı. Ben ... null' –

0
  1. Sen ilk TimerTask durmalıdır.
  2. değiştirebileceğiniz: handler.removeCallbacks(doAsynchronousTask);removeCallbacksAndMessages(null) için.

Düzenleme: programınıza kodu

Görünüş: timer.schedule(doAsynchronousTask, 0, 60000); -> hemen task başlangıç ​​ve 60'lı sonra tekrarlanan demektir. Ben senin onClickButton dinleyici gördüğünüzde, hemen idam edilecek 2 görevler
vardır. Sonuç olarak, yürütülen görevleri iptal edemezsiniz. Bunu önlemek için, çağırabilirsiniz: timer.schedule(doAsynchronousTask, 60000, 60000);

+0

Denedim 'olarak' doAsynchronoursTask' alıyorum Hala çalışıyor ... 'public void stopTask() { timer.cancel(); timer.purge(); // new PostDataAsyncTask(). Cancel (true); handler.removeCallbacksAndMessages (null); } ' –

+0

Nerede() callSpecficTime diyorsun? –

+0

Kullanıcı UI –