2010-12-29 4 views
0

Pour mon projet, j'essaie d'exécuter une méthode toutes les 10 secondes lorsque je clique sur un bouton "A" et il devrait s'arrêter lorsque je clique à nouveau sur le bouton (type de marche/arrêt).Android Thread Button sleep

c'est ce que je suis arrivé: - /:

ButtonA.setOnClickListener(new OnClickListener() {    
      @Override 
      public void onClick(View v) {    

         Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
         public void run() { 
          showCurrentLocation(); 
           Methodexecute(); 

         } 
        }, 10000); 
       } 

        } 
     }); 

Comment puis-je le répète, l'exécution de cette méthode toutes les 10 secondes jusqu'à ce que le bouton est cliqué à nouveau?

grâce

Répondre

1

Envisagez d'utiliser une minuterie avec un TimerTask, planifier toutes les 10 secondes. J'espère que cela fonctionnera:

Timer timer = new Timer(); 
    TimerTask task = new TimerTask() { 

     @Override 
     public void run() { 
      //insert your methods here 
     } 
    }; 

    boolean taskIsRunning = false; 
    if(taskIsRunning){ 
     timer.cancel(); 
     taskIsRunning = false; 
    } else {    
     timer.schedule(task, 0, 10000); 
     taskIsRunning = true; 
    } 
+0

pouvez-vous expliquer plus s'il vous plaît, merci – user557475

+0

voir ma réponse éditée. –

+0

cela n'a pas fonctionné: (( – user557475

0

Dans votre méthode onclick vous pouvez également activer la tâche de minuterie comme ceci:

... 
@Override public void onClick(View v) { 
    ... 
    toggleTask(); 
    ... 
} 
... 

puis, à partir du code de Jonathan, quelque chose comme

boolean taskIsRunning = false; 
Timer timer; 
TimerTask task = new TimerTask() { 
    @Override 
    public void run() { 
     //insert your methods here 
    } 
}; 
private void toggleTask() { 
    if(taskIsRunning){ 
     timer.cancel(); 
     taskIsRunning = false; 
    } else { 
     timer = new Timer()   
     timer.schedule(task, 0, 10000); 
     taskIsRunning = true; 
    } 
} 
+0

merci, mais quand j'annule le temporisateur, j'obtiens une erreur quand je le relance encore:/ – user557475

+0

Ah ... oui , il semble que vous deviez créer une nouvelle instance après l'avoir annulée J'ai modifié le code ci-dessus: http://developer.android.com/reference/java/util/Timer.html#cancel() pour référence. – tnunamak

1
handler = new Handler(); 
ButtonA.setOnClickListener(new OnClickListener() { 
    @Override public void onClick(View v) { 

      handler.postDelayed(new Runnable() { 
       public void run() { 
        if(taskIsRunning){ 
         showCurrentLocation(); 
         Methodexecute(); 
         handler.postDelayed(this,10000); 
        } 
       } 
      }, 10000); 
     } 
    } 
});