我有两个异步任务,分别执行不同的网络操作。我希望一个异步任务等待另一个任务完成特定变量的操作。我想通过在第一个异步任务的onPostExecute方法中执行另一个异步任务来实现这一目标,但是为了一个特定变量,我必须先让其他任务等待第一个任务完成。有什么高效的方法可以实现吗?
我有两个异步任务,分别执行不同的网络操作。我希望一个异步任务等待另一个任务完成特定变量的操作。我想通过在第一个异步任务的onPostExecute方法中执行另一个异步任务来实现这一目标,但是为了一个特定变量,我必须先让其他任务等待第一个任务完成。有什么高效的方法可以实现吗?
参考这个,你不能使用.execute()方法;
首先你需要像这样启动你的任务:
// Start first task
new Task1().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
// Start second task
new Task2().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, "");
然后,您可以创建一个静态变量,以便两个任务都可以访问它:
public static boolean task1Finished = false;
接下来是任务的简单示例:
第一个任务
private class Task1 extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
Log.d("myApp", "Task1 started");
for(int x = 0; x < 10; ++x)
{
try
{
Thread.sleep(1000);
//Log.d("myApp", "sleeped 1000 ms");
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
return "";
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(String result) {
// Lets the second task to know that first has finished
task1Finished = true;
}
}
private class Task2 extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
Log.d("myApp", "Task2 started");
while( task1Finished == false )
{
try
{
Log.d("myApp", "Waiting for Task1");
Thread.sleep(1000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
Log.d("myApp", "Task1 finished");
// Do what ever you like
// ...
return "";
}
@Override
protected void onPreExecute() {
}
@Override
protected void onPostExecute(String result) {
Log.d("myApp", "All done here (Task2)");
}
}