Android ASync task ProgressDialog n'est pas visible jusqu'à ce thread d'arrière-plan de finitions

J'ai un Android activité qui attire un flux RSS à partir d'une URL, et utilise l'analyseur SAX à coller chaque élément du document XML dans un tableau. Tout cela fonctionne très bien mais, comme prévu, prend un peu de temps, donc je veux utiliser AsyncActivity de le faire dans le fond. Mon code est comme suit:

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 j'appelle dans onCreate() avec

new AddTask().execute();

La ligne items = parser.getItems() fonctionne très bien - items être l'arraylist contenant chaque élément à partir du XML. Le problème que je me pose, c'est que lors du démarrage de l'activité, la ProgressDialog que je crée dans onPreExecute() n'est pas affiché jusqu'à ce que après la doInBackground() méthode a fini. c'est à dire j'obtiens un écran noir, une longue pause, puis a complètement peuplée liste avec les éléments. Pourquoi est-ce arrivé? Pourquoi n'est-ce pas le dessin de l'INTERFACE utilisateur, le ProgressDialog montrant, l'analyseur d'obtenir les éléments et ne cessent de s'ajouter à la liste, puis le ProgressDialog rejetant?

Sur "l'analyseur d'obtenir les éléments et ne cessent de s'ajouter à la liste" partie, la lenteur de l'étape sera dans l'analyse, et vous n'êtes pas rien ajouter à la liste à ce point. Par conséquent, tous vos articles obtiendrez claqué dans la liste assez rapidement, donc ne vous attendez pas beaucoup de "surplus" de effet ici.
C'est pas un problème, je n'ai pas vraiment l'esprit "incrémentale" les insertions sont, je veux juste le ProgressDialog de montrer tout le travail de fond est fait et disparaissent une fois que c'est fini.

OriginalL'auteur jackbot | 2010-04-24