2011-05-07 7 views
0

Honnêtement, je ne peux pas le comprendre - J'ai entendu dire que thread.stop() n'est pas une bonne chose à utiliser. Cela ne fonctionne pas non plus pour moi. Comment faire pour que les threads/gestionnaires arrêtent de fonctionner?Comment arrêter threads et gestionnaires dans Android

+0

Jetez un oeil à ceci: http://stackoverflow.com/questions/671049/how-do-you-kill- un-thread-en-java. – Malcolm

Répondre

5

Les fils doivent être terminés de manière "polie". Vous devriez construire un mécanisme pour que votre thread s'arrête. Vous pouvez avoir un paramètre booléen volatile qui est vérifié sur chaque boucle de votre fil (en supposant que vous avez des boucles là-dedans) comme ceci:

while (!threadStop) { 
    // Do stuff 
} 

Et vous pouvez définir la valeur booléenne false d'un autre thread (assurez-vous vous gérez tous les problèmes de synchronisation) et votre thread s'arrêtera dans l'itération suivante.

-2

La bonne façon d'arrêter un gestionnaire est: handler.getLooper().quit();
je mets en œuvre habituellement en envoyant un message à quitter handler qui se termine.

La bonne façon d'arrêter un thread générique est: thread.interrupt();
Le fil qui est besoins arrêté pour gérer l'interruption:

if(isInterrupted()) 
    return; 

Cela peut être mis dans une boucle si vous le souhaitez:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
String line = null; 
try { 
    while(!isInterrupted() && (line = br.readLine()) != null) { 
     // Do stuff with the line 
    } 
} 
catch(IOException e) { 
    // Handle IOException 
} 
catch(InterruptedException e) { 
    // Someone called interrupt on the thread 
    return; 
} 
+0

Thread.interrupt() ne doit pas être utilisé. Voir le commentaire ci-dessus. – Moritz

-1

vous pouvez l'utiliser comme ça ..

Thread mythread=new Thread(); 

if(!mythread){ 
    Thread dummy=mythread; 
    mythread=null; 
    dummy.interrupt(); 
} 

ou vous pouvez utiliser

mythread.setDeamon(true); 
+0

Quelle langue est-ce? 'if (! mythread)' ne fonctionnera pas en Java. –

2

Ok la réponse à arrêter les discussions ont été faites. Pour arrêter gestionnaire, vous devez utiliser cette méthode suivante:

removeCallbacksAndMessages from Handler class comme celui-ci

myHandler.removeCallbacksAndMessages(null); 
+0

Cela devrait être la réponse choisie, juste un peu d'information. Vérifiez si votre gestionnaire n'est pas nul avant d'utiliser ce qui précède. – User3

Questions connexes