Tengo una actividad de Android que toma un RSS de una URL y usa el analizador SAX para pegar cada elemento del XML en una matriz. Todo esto funciona bien pero, como era de esperar, toma un poco de tiempo, por lo que quiero usar AsyncActivity para hacerlo en segundo plano. Mi código es el siguiente:Android ASync tarea ProgressDialog no se muestra hasta que termina el hilo de fondo
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();
}
}
que llamo en onCreate()
con
new AddTask().execute();
La línea items = parser.getItems()
funciona bien - items
ser el ArrayList que contiene cada elemento del XML. El problema al que me enfrento es que al iniciar la actividad, el ProgressDialog que creo en onPreExecute()
no se muestra hasta que después de haya terminado el método doInBackground()
. es decir, obtengo una pantalla negra, una pausa larga, y luego una lista completamente poblada con los elementos. ¿Por qué sucede esto? ¿Por qué no se muestra el dibujo de la interfaz de usuario, se muestra ProgressDialog, el analizador obtiene los elementos y los agrega incrementalmente a la lista, y luego se descarta ProgressDialog?
En la parte "el analizador obtiene los elementos y los agrega incrementalmente a la lista", el paso lento estará en el análisis sintáctico y no agregará nada a la lista en ese punto. Por lo tanto, todos tus artículos se incluirán en la lista bastante rápido, así que no esperes mucho efecto "incremental" aquí. – CommonsWare
Eso no es problema, realmente no me importa cuán "incrementales" son las inserciones, solo quiero que el archivo de progreso se muestre mientras se realiza el trabajo de fondo y desaparezca una vez que haya finalizado. – jackbot