使用AsyncTask的问题

目录

 

AsyncTask的问题

一、线程池的运行机制

二、使用AsyncTask可能出现的问题

三、解决方法


AsyncTask的问题

一、线程池的运行机制

 

public static final Executor THREAD_POOL_EXECUTOR

= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,

TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

如果当前线程池中的数量小于corePoolSize,创建并添加的任务。

如果当前线程池中的数量等于corePoolSize,缓冲队列 workQueue未满,那么任务被放入缓冲队列、等待任务调度执行。

如果当前线程池中的数量大于corePoolSize,缓冲队列workQueue已满,并且线程池中的数量小于maximumPoolSize,新提交任务会创建新线程执行任务。

如果当前线程池中的数量大于corePoolSize,缓冲队列workQueue已满,并且线程池中的数量等于maximumPoolSize,新提交任务由Handler处理。

当线程池中的线程大于corePoolSize时,多余线程空闲时间超过keepAliveTime时,会关闭这部分线程。

 

二、使用AsyncTask可能出现的问题

public abstract class AsyncTask {

private static final int CORE_POOL_SIZE = CPU_COUNT + 1;

private static final int MAXIMUM_POOL_SIZE = CPU_COUNT * 2 + 1;

private static final BlockingQueue sPoolWorkQueue =

new LinkedBlockingQueue(128);

/**

* An {@link Executor} that can be used to execute tasks in parallel.

*/

public static final Executor THREAD_POOL_EXECUTOR

= new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE,

TimeUnit.SECONDS, sPoolWorkQueue, sThreadFactory);

}

 

如果使用AsyncTask提交的线程数过多则会抛出异常而导致程序崩溃。

 

三、解决方法

使用无限大小的缓存队列,构造适合自己的线程池。

你可能感兴趣的:(Android应用开发基础)