У меня есть операция 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
является массивом, содержащим каждый элемент из XML. Проблема, с которой я сталкиваюсь, заключается в том, что при запуске операции ProgressDialog, который я создаю в onPreExecute()
, не отображается до тех пор, пока после не завершится метод doInBackground()
. я получаю черный экран, длинную паузу, затем полностью заполненный список с элементами. Почему это происходит? Почему не рисуется пользовательский интерфейс, отображается ProgressDialog, парсер получает элементы и постепенно добавляет их в список, а затем ProgressDialog закрывает?