2010-08-13 11 views
0

J'ai une longue tâche qui nécessite 10/15 secondes. Je veux afficher une boîte de dialogue, une vue ou autre chose pour que l'utilisateur sache "hei! Je travaille pour vous, je suis à 90%".Comment afficher une boîte de dialogue en attente en android

En fait, j'ai 3 mises en page: currentLayout, progressLayout et resultLayout. De l'activité principale j'ai une fonction comme celle-ci:

... 
setContentView(R.layout.progressLayout); 
SomeLongTask(); 
setContentView(R.layout.resultLayout); 
... 

mais la progression ne s'affiche jamais.

Quelle est la meilleure façon de faire cela?

Répondre

4

Vous démarrez la longue tâche dans votre thread d'interface utilisateur. Ce thread est également chargé de redessiner l'interface utilisateur et d'agir sur les événements d'entrée. Si vous effectuez un appel bloquant à la fonction de tâche longue, votre thread d'interface utilisateur sera occupé pour effectuer la tâche et l'interface utilisateur ne pourra pas changer. Le système Android pense même que votre application a planté parce qu'elle ne réagit plus à la saisie de l'utilisateur.

Vous devez démarrer la tâche dans un AsyncTask et effectuer tout le travail lourd de la méthode doInBackground et mettre à jour votre interface utilisateur dans la méthode onPostExecute. De cette façon, le thread de l'interface utilisateur lancera la tâche, puis reviendra à la mise à jour de l'interface et à l'exécution des événements utilisateur.

+0

Très utile! Merci. – Redax

Questions connexes