Android 同步两个异步任务
在 Android 中,我们通常使用 AsyncTask
来执行异步任务。然而,当需要同时执行两个或多个异步任务时,我们可以使用一种名为 AsyncTask
的特殊类型——AsyncTask
可以持有并执行自己的 AsyncTask
。以下是如何在 Android 中同步两个异步任务的实现方法。
方法 1: 使用 AsyncTask
的 execute
和 executeOnExecutor
AsyncTask
实例。AsyncTask
的 doInBackground
方法中执行第一个异步任务。onPostExecute
方法中执行第二个异步任务。onPostExecute
方法中调用 execute
或 executeOnExecutor
方法来执行第二个异步任务。class MainActivity extends AppCompatActivity {
private Button mButton;
private AsyncTask<Void, Void, Void> mTask1;
private AsyncTask<Void, Void, Void> mTask2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.button);
mTask1 = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// 执行第一个异步任务
return null;
}
};
mTask2 = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// 执行第二个异步任务
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// 执行第二个异步任务的后续操作
}
};
}
@Override
protected void onResume() {
super.onResume();
mTask1.execute();
mTask2.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
}
@Override
protected void onPause() {
super.onPause();
mTask1.cancel(true);
mTask2.cancel(true);
}
}
方法 2: 使用线程池
class MainActivity extends AppCompatActivity {
private Button mButton;
private ExecutorService mExecutor;
private AsyncTask<Void, Void, Void> mTask1;
private AsyncTask<Void, Void, Void> mTask2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mButton = findViewById(R.id.button);
mExecutor = Executors.newFixedThreadPool(2);
mTask1 = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// 执行第一个异步任务
return null;
}
};
mTask2 = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
// 执行第二个异步任务
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// 执行第二个异步任务的后续操作
}
};
}
@Override
protected void onResume() {
super.onResume();
mExecutor.execute(mTask1);
mExecutor.execute(mTask2);
}
@Override
protected void onPause() {
super.onPause();
mExecutor.shutdown();
}
}
注意:方法 2 是一种简化的方法,仅适用于线程池中线程数量固定的情况。在实际应用中,如果线程池中线程数量不确定,建议使用方法 1。
领取专属 10元无门槛券
手把手带您无忧上云