У меня есть активность Android, которая захватывает RSS-канал из URL-адреса и использует синтаксический анализатор SAX для привязки каждого элемента из XML в массив. Все это прекрасно работает, но, как и ожидалось, занимает немного времени, поэтому я хочу использовать AsyncActivity, чтобы сделать это в фоновом режиме. Мой код выглядит следующим образом:
class AddTask extends AsyncTask<Void, Item, Void> {
protected void onPreExecute() {
pDialog = ProgressDialog.show(MyActivity.this,"Please wait...", "Retrieving data ...", true);
}
protected Void doInBackground(Void... unused) {
items = parser.getItems();
for (Item it : items) {
publishProgress(it);
}
return(null);
}
protected void onProgressUpdate(Item... item) {
adapter.add(item[0]);
}
protected void onPostExecute(Void unused) {
pDialog.dismiss();
}
}
Я вызываю onCreate()
с
new AddTask().execute();
Строка items = parser.getItems()
отлично работает - items
является arraylist, содержащий каждый элемент из XML. Проблема, с которой я столкнулся, заключается в том, что при запуске операции ProgressDialog, который я создаю в onPreExecute()
, показывается только после завершения метода doInBackground()
. т.е. я получаю черный экран, длинную паузу, а затем полностью заполненный список с элементами. Почему это происходит? Почему рисунок пользовательского интерфейса не отображается, отображается ProgressDialog, парсер получает элементы и постепенно добавляет их в список, а затем отклоняется ProgressDialog?