В AsyncTasks
вы можете обновить пользовательский интерфейс для onProgressUpdate
или onPostExecute
обратных вызовов.Эти два обратных вызова выполняются в потоке main (UI) , в то время как doInBackground
выполняется в потоке worker .
Для выполнения прогресса "B"бар, показывающий после завершения AsynctaskA
Я бы начал AsyncTaskB
в onPostExecute
обратном вызове AsyncTaskA
, затем обновил бы индикатор выполнения B в onProgressUpdate
обратном вызове
public ProgressBar progressBarA = ProgressBar(this); // init with a progress bar coming from the UI here
public ProgressBar progressBarB = ProgressBar(this); // init with a progress bar coming from the UI here
private class AsyncTaskA extends AsyncTask<Void, Integer, Boolean> {
protected Boolean doInBackground(Void... params) {
// do something in the background here
for (int i = 0; i < 100; i++) {
publishProgress(i);
}
return true;
}
protected void onProgressUpdate(Integer... progress) {
progressBarA.setProgress(progress[0]);
}
protected void onPostExecute(Void result) {
AsyncTaskB taskB = new AsyncTaskB();
taskB.execute();
}
}
private class AsyncTaskB extends AsyncTask<Void, Integer, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBarB.setProgress(0);
}
protected Boolean doInBackground(Void... params) {
// do something in the background here
for (int i = 0; i < 100; i++) {
publishProgress(i);
}
return true;
}
protected void onProgressUpdate(Integer... progress) {
progressBarB.setProgress(progress[0]);
}
protected void onPostExecute(Void result) {
// Toast work complete!
}
}