我正在尝试创建大量的asynctask,并按顺序运行一个。 可能吗?我找不到任何解决方案。
onPostExecute然后再次调用一个新的AsnycTask对我来说不是一个好的解决方案。
这就是我想要的:
async1.execute
async2.execute
async3.execute
async1.over->async2.start
async2.over->async3.start
答案 0 :(得分:1)
喜欢
async1.execute
then write async2.execute into onPostexecute of async1
and then write async3.execute into onPostexecute of async2
没有任何其他有效方法。您可以考虑实现线程(等待/通知),但这不适用于asyntask。
答案 1 :(得分:1)
如果您使用串行执行程序(API 11及更高版本中的默认值),则会自动执行此操作。如果您需要在API 11之前使用它,则需要执行经典的等待/通知技巧(https://www.science.uva.nl/ict/ossdocs/java/tutorial/java/threads/waitAndNotify.html)
答案 2 :(得分:1)
我猜你应该使用Executor whit BlockQueue而不是AsyncTask,并使用Handler发送句柄结果。 BockQueue是一个FIFO数据结构,适合你的风格......
答案 3 :(得分:0)
让第一个AsyncTask为MyAsyncTask1
,第二个为MyAsyncTask2
。现在你想要的是。
执行活动中的MyAsyncTask1
收到回复
现在成功响应,执行MyAsyncTask2
怎么样按顺序调用它们:
MyAsyncTask1.execute();
MyAsyncTask2.execute();
上述代码的问题可以通过以下事实来理解:在AsyncTask
对象上调用execute将创建一个在不同内存空间中运行的新线程,并立即启动下一个AyncTask
在它自己的内存空间。但这不是我们想要的。我们希望第一个线程必须完成它的工作,然后第二个线程才会开始工作。如何实现?
答案在于onPostExecute()
。这是帮助您摆脱这种情况的方法。在MyAsyncTask1
上调用执行然后在第一个doInBackground()
之后调用{ {1}}将调用AsyncTask
。请检查onPostExecute()
如果响应为空,如果收到的响应不等于null,并且是有效响应,则调用执行onPostExecute()
(如果指定了相应的参数)。
你可以在链中做到这一点......
答案 4 :(得分:0)
// Async Task Class here async1
class YourAsynClass extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Shows Progress Bar Dialog and then call doInBackground method
showDialog(progress_bar_type);
}
@Override
protected String doInBackground(String... PassYourdata) {
// do your stuff here
}
@Override
protected void onPostExecute(String IFYouwantPassData) {
// Dismiss the dialog
dismissDialog(progress_bar_type);
// here async2
new SecondAsyncTask.execute(Passeddata);
}
}
并且在第三个中做同样的