我知道有很多东西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()
没有按顺序执行。
答案 0 :(得分:3)
最简单的选项:只有一个AsyncTask
,您可以在doInBackground()
处理所有工作,使用publishProgress()
和onProgressUpdate()
发布每个下载结果,如果需要。我不知道为什么你认为有N个非并行AsyncTask
个实例是个好主意。
或者:根本不使用AsyncTask
。使用您自己的ThreadPoolExecutor
,这样您就可以完全控制作业的特征。使用事件总线(greenrobot&#EventBA,Otto,LocalBroadcastManager
等)在UI线程上发布结果。
或者:从第一个onPostExecute()
的{{1}}开始,开始链中的下一个AsyncTask
。