One strange thing that I've seen in my usage of AsycTask is that the Thread associated with an AsyncTask seems to live on after the task has completed. It appears to be in some kind of idle/finalized state, but the resources associated with the Thread itself remain visible in the debugger. As far as I can tell, the task has completed and exited normally. Subsequent invocations of the task seem to create a new thread in the process.
Is this some kind of optimization? A leak? A misuse of AsyncTask? I've never spent a huge amount of time on figuring it out, as the use case for me was fairly fringe, but I've wondered about it... On Nov 11, 11:25 am, Romain Guy <[email protected]> wrote: > Please consider the implications of this: does it even make sense to > have 20+ threads (on a single CPU device) updating the UI at once? > That is NOT the purpose of AsyncTask. Also, since Donut, the limit of > enqueued tasks in AsyncTask is 128, not 20. So AsyncTask has a maximum > of 10 threads running concurrently and can hold up to 128 tasks > waiting for a thread to be freed in the pool. So basically AsyncTask > does exactly what you are trying to do here. > > > > > > On Wed, Nov 11, 2009 at 1:02 AM, Atif Gulzar <[email protected]> wrote: > > Android has a limit to rum at MAX 20 concurrent AsyncTask. To handle this > > limit I created a AsyncTaskPool.java utility. Its not a pool in true sense > > but a kind of scheduler. I am posting it here for your comments and it may > > help others. > > > import java.util.ArrayList; > > > import android.os.AsyncTask; > > > public class AsyncTaskPool > > { > > > private int poolSize; > > private ArrayList<AsyncTask> currentTasks = new ArrayList<AsyncTask>(); > > private ArrayList<Object> pendingTasks = new ArrayList<Object>(); > > > /** > > * @param poolSize > > * : it should be less than 20. As Android only supports max. > > 20 concurrent Asynch tasks. > > */ > > public AsyncTaskPool(int poolSize) > > { > > this.poolSize = poolSize; > > } > > > public int getPoolSize() > > { > > return poolSize; > > } > > > public boolean addTask(AsyncTask asyncTask, Object... params) > > { > > > if (currentTasks.size() < poolSize) > > { > > currentTasks.add(asyncTask); > > if (params != null) > > asyncTask.execute(params); > > else > > asyncTask.execute(); > > } > > else > > { > > Object[] task = new Object[2]; > > task[0] = asyncTask; > > task[1] = params; > > > pendingTasks.add(task); > > } > > > return true; > > } > > > public boolean removeTask(AsyncTask task) > > { > > if(currentTasks.contains(task)) > > { > > currentTasks.remove(task); > > return true; > > } > > return false; > > } > > > //Add this method in the onPostExecute method of AsyncTask > > public boolean removeAndExecuteNext(AsyncTask atask) > > { > > removeTask(atask); > > if (pendingTasks.size()>0 && currentTasks.size()<poolSize) > > { > > Object [] task = (Object []) pendingTasks.get(0); > > pendingTasks.remove(task); > > > addTask((AsyncTask)task[0], (Object[])task[1]); > > > } > > > return false; > > } > > > } > > > -- > > Best Regards, > > Atif Gulzar > > > I ◘◘◘◘ Unicode, ɹɐzlnƃ ɟıʇɐ > > > -- > > You received this message because you are subscribed to the Google > > Groups "Android Developers" group. > > To post to this group, send email to [email protected] > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group at > >http://groups.google.com/group/android-developers?hl=en > > -- > Romain Guy > Android framework engineer > [email protected] > > Note: please don't send private questions to me, as I don't have time > to provide private support. All such questions should be posted on > public forums, where I and others can see and answer them- Hide quoted text - > > - Show quoted text - -- You received this message because you are subscribed to the Google Groups "Android Developers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/android-developers?hl=en

