2012-11-09 16 views
5

Voglio uccidere un thread specifico ma non riesco a capire un modo per farlo funzionare. Includo tutte le informazioni successive, anche se non sembra importante:android kill thread specifico su evento barra delle azioni

Uso la barra delle azioni sherlock e voglio eliminare un thread su un evento del pulsante di azione. Quindi, ho:

Thread myThread; 
    myThread = new Thread(new Runnable(){ 
     public void run(){ 
       functionX(); 
     } 
     }); 
    myThread.start(); 

Questo thread è un thread di lunga durata e funcionX() crea anche alcuni nuovi thread. Voglio uccidere il thread quando:

public boolean onOptionsItemSelected(MenuItem item){ 
    switch (item.getItemId()) { 

    case android.R.id.home: 
     myThread.interrupt(); 
     break; 
    }; 

Ho provato con ExecutorService, utilizzando presentare (eseguibile) per un risultato futuro e Future.cancel, ma non sembra funzionare. Vorrei anche ricordare che functionX() usa le richieste HTTP get per ottenere dati da un servizio JSON.

risposta

4

ci sono diversi modi si può fare questo, un paio di loro può essere come

  1. Invece di Discussione uso TimerTask e chiamare timeTask.cancel() - per interrompere
  2. Nel metodo run() di il filo, mantenere il controllo un valore booleano per determinare se il filo deve essere chiuso e quindi è possibile chiamare interrompere o meglio lancerà un'eccezione
+0

+1. il suggerimento 2 è quello che userei. Se stai eseguendo un ciclo veloce di un thread, includilo al livello più alto, altrimenti ne hai alcuni attraverso il codice. Prima di elaborare sezioni affamate. – Doomsknight

+0

Grazie. Vado con la tecnica 2. –

Problemi correlati