我可以链接asynchronous任务顺序(从前一个asynctask完成后开始一个)

每次我做一个httpRequest的时候,代码执行的时候屏幕都会被锁住几秒钟。 因此,我使用AsyncTask来执行所有我的httpRequest东西在一个单独的线程,同时把一个ProgressDialog所以用户知道发生了什么事情。

我最近遇到以下情况:我的一个httpRequest的input取决于先前的httpRequest (+ parse)操作的结果。 我不能只是把这两个AsyncTask按顺序导致Android将把它们放在两个线程,并启动第二个没有第一个完成。 没有适当的input(第一个httpRequest的结果),我的第二个httpRequest将崩溃的应用程序。

有没有办法,我可以把一个wait()强制第二个AsyncTask不开始,直到第一个完成?

Solutions Collecting From Web of "我可以链接asynchronous任务顺序(从前一个asynctask完成后开始一个)"

我前几天也有同样的情况。 我已经用这种方式解决了它:将你的活动的引用传递给asynchronous类的构造函数,并在后台函数中执行do。 现在在后执行函数调用从asynchronous类的UR活动的公共方法再次执行任务…或者试试这个:

  if (asynclass.getStatus() == android.os.AsyncTask.Status.PENDING) { asynclass.execute(); } else if (RF.getStatus() == android.os.AsyncTask.Status.FINISHED) { asynclass = new asyncclass(); asynclass.execute(); } else { Toast.maketoast(this, "Plz wait", 1).show(); } 

干杯

所以我想(不知道),你需要调用第二个执行方法的asyncTask

 protected void onPostExecute(final Void unused) { if (this.dialog.isShowing()) { this.dialog.dismiss(); new secTask().execute(); }} 

是的你可以。 但是只能在onProgressUpdate()onPostExecute() 。 尝试这样做:

 private class Task1 extends AsyncTask<Void, Void, Void> { ... ... protected void onPostExecute(Void unused) { dialog1.dismiss(); new Task2().execute(); } } 

同样的,你必须把new Task3().execute(); 在Task2的AsyncTaskonPostExecute()方法中

不要在你的主代码中这样称呼他们。 如果你这样做,那么他们将一起运行:

 // This is wrong new Task1().execute(); new Task2().execute(); new Task3().execute(); 

参考: AsyncTask

如何使用executOnExecutor方法:

 public void runTasks() { AsyncTask<Void,Void,Void> aTask = myTask(); AsyncTask<Void,Void,Integer> aTask1 = myTask1(); AsyncTask<Void,Void,Void> aTask2 = myTask2(); aTask.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); aTask1.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); aTask2.executeOnExecutor(AsyncTask.SERIAL_EXECUTOR); } 

寻找比我目前使用的更好的解决scheme陷入这个线程,但它似乎仍然是最好的…

我所做的是在每个asynchronous任务的构造函数中传递一个runnable。

无论是在后台执行还是在后台执行结束时,我都会启动我的下一个任务,如果我有一个执行runnable的任务。

  if(doOnPostExec != null) doOnPostExec.run(); 

这样我就可以通过保持代码灵活性的runnables来改变我的asynctasks的顺序,如果我通过没有runnable,他们通常会完成。 runnables只包含一行调用下一个asynctask。

我只是不喜欢制作所有这些可运行的程序。 希望在vb.net中存在链接代表的东西。

我之前遇到过这个问题。 我所做的是使用callback接口类,并在onPostExecute()方法内调用它的方法。 这样你就可以从callback方法中调用另一个AsyncTask。