Android开发:AsyncTask在调用execute()后没有马上执行的问题

有时候,我们在调用了execute()方法后,AsyncTask并没有马上执行,而是等了很久后才执行,这是为什么呢?
原因在于AsyncTask默认自己维护一个静态的线程池,而该线程池只允许同时执行一个线程,也就是说,不管多少个AsyncTask,只要是调用execute()方法,都是共享这个默认进程池的,你的任务必须在之前的任务执行完以后,才能执行。可以理解为,默认情况下,所有的AsyncTask在一个独立于UI线程的线程中执行,任务需要排队,先execute的先执行,后面的只能等。
解决方法是,自己来维护这个线程池和任务列队。
好处:不会与其他的AsyncTask冲突,可以随时取消在排队的未执行的任务。

LinkedBlockingQueue blockingQueue = new LinkedBlockingQueue();
ExecutorService exec = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, blockingQueue);
new LoadTask().executeOnExecutor(exec);

如果需要清除排队的任务,可以调blockingQueue.clear()。

© 2014, 冰冻鱼. 请尊重作者劳动成果,复制转载保留本站链接! 应用开发笔记

发表评论

电子邮件地址不会被公开。 必填项已用*标注