2010-08-17 13 views
10

Mentre si lavora su un'applicazione, ho notato che il conteggio dei thread continua a crescere ininterrottamente. I thread AsyncTask rimangono aperti per qualche motivo (sono sicuro che abbiano terminato l'elaborazione e l'uscita) non ho idea del perché Continuo a creare più thread di questo tipo e continuano a funzionare indefinitamente. c'è un modo per verificare che questi thread siano terminati alla fine? ci sono problemi noti con i thread AsyncTasks che rimangono aperti?Android AsyncTask rimane nello stato di esecuzione dopo aver completato

Quando si esegue questa:

public class DoNothingTask extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected Void doInBackground(Void... params) { 
      // TODO Auto-generated method stub 
      return null; 
     } 

    } 

che vedo nella debbuger un nuovo thread per ogni volta che lo faccio new DoNothingTask().execute(null); come folows

Thread[<ThreadNumber>AsyncTask#1](running)

, la mia domanda è: perché è questo? la mia applicazione si basa su AsyncTask e non posso avere un nuovo thread creato e rimanere vivo dopo ogni attività.

Grazie, Totem

risposta

10

stavo sbattere la testa su questo pure, e sono imbattuto in questa risposta (beh, è ​​più una spiegazione di una risposta):

CommonsWare spiega:

AsyncTask gestisce un pool di thread , creato con ThreadPoolExecutor. Avrà da 5 a 128 thread. Se ci sono più di 5 discussioni, quelle discussioni extra rimarranno attaccate per almeno 10 secondi prima di essere rimosse. (nota: queste cifre sono per il codice open source attualmente visibile e variano a seconda della versione di Android).

Lasciare i thread AsyncTask da soli, per favore.

domanda Fonte: AsyncTask threads never die

-2

si dovrebbe usare

thread.join 

per essere sicuri che un thread completa. Stai facendo questo?

+3

non penso che questo è applicabile per AsyncTask(). – totem

1

Non sono sicuro se questo è correlato, ma ho affrontato problemi simili anche in una delle mie applicazioni.

Ho un'attività che inizializza i thread TimerTask. Le attività vengono eseguite correttamente all'intervallo specificato, ma dopo un certo periodo di inattività, il numero di questi thread sembra essere aumentato (mostrando che i thread sono rimasti aperti e vengono creati nuovi thread). Il problema era il caricamento e lo scaricamento dinamici della mia applicazione da parte di Android VM. I thread originali non sono mai stati utilizzati per essere uccisi dove, come in ogni nuovo carico dell'applicazione, l'inizializzazione del thread si verificava. Questo è il motivo per cui il numero totale di thread nella mia domanda aumentava.

Esiste un'implementazione simile anche nell'applicazione.

+0

No, non sto creando i thread sulla creazione di AsyncTask che sono comunque uno scatto. – totem

Problemi correlati