9

Sto usando asyncTasks, per caricare elementi della lista con immagini (tutorial di Android Proprio seguito di bitmap in modo efficiente di carico)Quanti AsyncTasks posso eseguire in un'applicazione unico processo

In DDMS, posso vedere fino a 5 AsyncTasks essere in esecuzione

Ora inoltre ho aggiunto un altro AsyncTask, che esegue alcune decodifiche utilizzando la classe MediaCodec.

Ora in DDMS, vedo ancora 5 AsyncTasks e l'immagine caricando attività asynctask o decodifica async, non entrambe.

Quando decodifica è in esecuzione, se ho scorrere l'elenco, immagini elementi non vengono aggiornati Counterly Quando lancio nuovo AsyncTask decodifica chiamando è metodo execute, la decodifica non si avvia, ma se ho scorrere la visualizzazione elenco ora , le immagini sono aggiornate.

Quindi AsyncTask è limitato ??

Anche in listAdapter lancio un AsyncTask per chiamata getView. Mi aspetterei che 7 eseguano asyncTasks (se gli elementi di elenco sono 7, diciamo), ma DDMS mostra solo 5 asynctask in esecuzione.

Ora qualcuno può spiegarmi qual è la magia nera che non riesco a pronunciare?

+1

risposta qui http: // stackoverf low.com/questions/9654148/android-asynctask-threads-limits/9654445#9654445 – nnesterov

risposta

16

Quanti AsyncTasks è possibile eseguire contemporaneamente?

Nella maggior parte delle versioni di Android, la risposta è .

Perché generalmente vedi esattamente 5 thread AsyncTask?

AsyncTask la gestione dei thread è piuttosto confusa, soprattutto perché è cambiata molto dalla prima versione di Android.

Nelle versioni Android più recenti, vengono creati 5 thread per impostazione predefinita e il ThreadPoolExecutor tenta di eseguire i AsyncTask s su questi 5 thread. Se si creano più di 5 AsyncTask s, è possibile accodarli o creare nuovi thread (ma solo fino a 128).

Si noti che nelle versioni precedenti di Android, questi limiti erano diversi. Credo che, originariamente, sia stato creato un solo thread.

Ma tutte le immagini dovrebbero caricare fine ...

risolvere le altre parte della tua domanda, a meno che non si desidera caricare un sacco di immagini (in cui un sacco significa> 128), tutte le immagini dovrebbe caricare, anche se probabilmente in sequenza. Se il primo 5 carico e il resto no, ciò potrebbe indicare che la tua funzione doInBackground() non sta finendo mai o che c'è qualcos'altro che non funziona con lo AsyncTask che stai usando.

Risorse:

Ecco alcune risorse utili per l'apprendimento gestione di più su AsyncTask filo:

AsyncTask threads never die

Android AsyncTask threads limits?

Is there a limit of AsyncTasks to be executed at the same time?

+0

Tutte le mie immagini si stanno caricando. Ancora un dubbio, AsyncTasks annullati, conterà al numero di AsyncTasks? cioè, contato nel numero di thread principale o nel numero massimo di thread? – nmxprime

+1

Una volta che termina 'AsyncTask', non conterrebbe verso il 128, credo. Tuttavia, anche se hai meno di 5 'AsyncTask' rimanenti, probabilmente vedrai comunque 5 thread. (Vedere il primo link sopra.) – Computerish

+0

Ottima risposta. –

Problemi correlati