Android中如何让三个异步方法同时执行无需等待前一个完成?
如何让多个AsyncTask同时并行执行?
我有3个异步方法:
1 - Update Data
2 - Validate Data
3 - Enter当前我的类代码如下:
public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_sync); .... new Update (). execute (); new Validate (). execute (); new Enter (). execute (); }原本期望这三个方法能同时执行,但实际它们会等待前一个方法执行完成后才运行。请问如何让它们全部同时运行,无需等待前一个方法执行完毕?
嘿,这个问题我之前踩过坑!在Android 3.0(API 11)之后,AsyncTask默认使用串行执行器(SerialExecutor),所以你连续调用execute()时,任务会排队逐个执行,没法并行跑起来。下面给你两个靠谱的解决办法:
方法一:用官方内置的并行执行器
AsyncTask提供了executeOnExecutor()方法,直接传入AsyncTask.THREAD_POOL_EXECUTOR这个官方维护的线程池执行器,就能让任务立刻并行启动:
public void onCreate (Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_sync); .... new Update().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); new Validate().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); new Enter().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); }
这个是官方推荐的方案,THREAD_POOL_EXECUTOR已经帮你优化了线程池的配置,足够应对大部分场景。
方法二:自定义线程池执行器(按需使用)
如果你需要更灵活的线程控制(比如调整核心线程数、队列大小),可以自己创建ThreadPoolExecutor:
// 自定义线程池:核心线程3个,最大线程5个,空闲线程10秒后回收 Executor customExecutor = new ThreadPoolExecutor( 3, 5, 10L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>() ); // 用自定义执行器启动任务 new Update().executeOnExecutor(customExecutor); new Validate().executeOnExecutor(customExecutor); new Enter().executeOnExecutor(customExecutor);
这种方式适合对线程资源有特殊要求的场景,比如任务量很大时避免线程过多导致性能下降。
额外提醒
- 所有耗时逻辑一定要放在AsyncTask的
doInBackground()里,onPostExecute()是专门用来回到UI线程更新界面的,别在后台线程操作UI控件,会直接崩溃。 - 如果你的App需要兼容API 11之前的版本,那其实默认就是并行的,但现在基本不用考虑这么老的系统了。
内容的提问来源于stack exchange,提问作者Juan Tobon
相关产品推荐
相关产品推荐

