2010-07-01 3 views
3

HI, J'essaie d'afficher un ProgressDialog pendant le chargement de l'activité. mon problème est que bien que j'ai accompli tout le travail dans l'activité il faut beaucoup de temps pour charger l'activité, je suppose que c'est parce que j'utilise plusieurs vues avec plusieurs listes avec des adaptateurs de tableau personnalisés dans un viewflipper. L'interface utilisateur met longtemps à s'afficher.Android show ProgressDialog jusqu'à ce que l'interface utilisateur de l'activité ait fini de se charger

Comment ferais-je pour vérifier que toute l'interface utilisateur à l'intérieur de l'activité a terminé le chargement?

ou est-il un moyen de précharger toute l'activité et l'interface utilisateur?

Merci,

+0

faites-vous le «travail» sur le même fil que l'interface utilisateur? le chargement de vos listes de lecture et quoi que ce soit, sur le même fil bloquera l'activité de montrer. –

+0

Im faire le travail dans le sur créer afin que je puisse générer la vue, puis appeler setContentView(); Cependant, le OnCreate() se termine et aussi tous les appels à OnStart() et OnResume() mais je vois l'interface utilisateur seulement environ 8 secondes après. – totem

Répondre

0

Utilisez AsyncTask

new DownloadTask().execute(); 


    private class DownloadTask extends AsyncTask<String, Void, Object> { 

    protected void doInBackgroind(Void... arg0){ 
    //Do time Consuming Processing 
    publishProgres() 
    return null; 
    } 

    protected void onProgressUpdate(Void... arg0){ 
    } 

    protected void onPostExecute(Void... result){ 
    log.i("AvtivityInfo", "activity finished loading..."); 
    } 

}  
+0

Je ne sais pas si ça va marcher ... Je vais devoir essayer par moi-même. – Cristian

+0

Comment cela va-t-il aider? mon problème est que l'interface utilisateur ne s'affiche pas même si l'activité a déjà récupéré tous les messages d'information visibles tels que "public void onWindowFocusChanged (boolean hasFocus)" tous les trucs de l'interface utilisateur est le sur créer, je soupçonne que les adaptateurs listview font quelque chose le backgroud et c'est le problème principal – totem

+0

Le problème est que ce n'est pas une "tâche" il n'y a pas de téléchargement ou de communication ou aucune opération asynchrone impliquée ici son chargement seulement les ressources de XML et tout se passe dans le OnCreate qui prend moins d'une seconde complète, cependant l'interface utilisateur n'est vraiment visible qu'après 8 secondes environ. – totem

0

Si vous pensez que vous avez besoin d'une ProgressDialog parce que votre activité ouvre trop lentement, vous avez beaucoup plus gros problèmes. Android est susceptible de tuer votre activité avec une erreur d'inactivité.

Vous pouvez soit obtenir sophistiqué et utiliser Traceview pour trouver votre problème de performance, ou vous pouvez simplement expérimenter. Par exemple, vous pouvez ignorer les adaptateurs de configuration dans votre ListViews, pour confirmer que le problème se trouve bien là. Jorgesys avait la bonne réponse dans son entrée maintenant effacée, d'après ce que je peux dire. Je suppose que le chargement de vos adaptateurs prend du temps, peut-être dans les requêtes de base de données, et vous devez déplacer une partie de cela dans AsyncTasks.

+0

C'est le truc qu'il n'y a pas de requêtes DB, rien que du travail avec des drawables et des layouts. Je ne peux pas penser à ce qu'il faut décomposer en AsyncTasks parce que tout le travail est dans le OnCreate qui est très rapide. Le ArrayAdapter charge async? et si oui, y a-t-il un moyen de vérifier quand le chargement est fait? – totem

+0

@totem: "ArrayAdapter charge async?" Non. – CommonsWare

Questions connexes