如何在循环中按顺序执行Asynctask?

时间:2015-09-22 15:40:07

标签: android multithreading android-asynctask

我知道有很多东西AsyncTask,我已经探索了很长一段时间,但仍未找到灵魂。我必须以序列化的方式在FTP服务器上上传图像。我知道在API 11之后,AsyncTask默认顺序执行。但是,不完全顺序 ...到目前为止,我的观察结果是:只有DoInBackgorund()方法按顺序执行,所以如果你有N个asynctasks被执行,他们的OnPreExecute()被调用独立于正在执行的任何其他Asynctask的执行。我想要的是完整的顺序执行像这样:

ASYNCTASK 1:

OnPreExecute();
DoInBackgorund();
OnPostExecute();

跟着:

ASYNCTASK 2:

OnPreExecute();
DoInBackgorund();
OnPostExecute();

跟着:

ASYNCTASK 2:

OnPreExecute();
DoInBackgorund();
OnPostExecute();

......等等。

请提供一些想法,调整或概念,以实现异步线程的完整顺序执行。虚拟代码将不胜感激。提前谢谢。

编辑:图片上传机制完美无缺,图片正在上传。我正在创建uploadTask的实例(我的asyncTask用于上传图片)并在循环中执行它们。唯一的问题是;我要在每个帖子的OnPreExecute()中更新用户界面(以显示正在上传的图片数量,在TextView中)。这是我的问题,因为OnPreExecute()没有按顺序执行。

1 个答案:

答案 0 :(得分:3)

最简单的选项:只有一个AsyncTask,您可以在doInBackground()处理所有工作,使用publishProgress()onProgressUpdate()发布每个下载结果,如果需要。我不知道为什么你认为有N个非并行AsyncTask个实例是个好主意。

或者:根本不使用AsyncTask。使用您自己的ThreadPoolExecutor,这样您就可以完全控制作业的特征。使用事件总线(greenrobot&#EventBA,Otto,LocalBroadcastManager等)在UI线程上发布结果。

或者:从第一个onPostExecute()的{​​{1}}开始,开始链中的下一个AsyncTask