Re: [android-developers] AsyncTaskPool | Tutorial

2009-11-19 Thread Atif Gulzar
>>Also, since Donut, the limit of  enqueued tasks in AsyncTask is 128, not
20. So AsyncTask has a maximum of 10 threads running concurrently

so what is the solution for Android 1.5


--
Best Regards,
Atif Gulzar

I  Unicode, ɹɐzlnƃ ɟıʇɐ



On Wed, Nov 11, 2009 at 9:25 PM, Romain Guy  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 
> 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 currentTasks = new
> ArrayList();
> > private ArrayList pendingTasks = new ArrayList();
> >
> > /**
> >  * @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() > {
> > 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 android-developers@googlegroups.com
> > To unsubscribe from this group, send email to
> > android-developers+unsubscr...@googlegroups.com
> > For more options, visit this group at
> > http://groups.google.com/group/android-developers?hl=en
>
>
>
> --
> Romain Guy
> Android framework engineer
> romain...@android.com
>
> 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
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Re: [android-developers] AsyncTaskPool | Tutorial

2009-11-11 Thread Romain Guy
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  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 currentTasks = new ArrayList();
>     private ArrayList pendingTasks = new ArrayList();
>
>     /**
>  * @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()     {
>         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 android-developers@googlegroups.com
> To unsubscribe from this group, send email to
> android-developers+unsubscr...@googlegroups.com
> For more options, visit this group at
> http://groups.google.com/group/android-developers?hl=en



-- 
Romain Guy
Android framework engineer
romain...@android.com

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

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en