2010-09-19 20 views
1

Je voudrais avoir un message Toast apparaître pendant que mon application est en train de télécharger des informations mais même si je la mets avant mon code, elle ne s'affiche que lorsque le téléchargement est terminé. Mettre mon code dans un thread séparé provoque beaucoup de maux de tête, mais mettre un toast dans un thread séparé ne fonctionne pas non plus. Y at-il de toute façon que je puisse avoir ce message de Toast avant cela ou est-ce que je vais devoir travailler à travers les maux de tête?Toast Immédiatement

+4

Ce titre a certainement attiré mon oeil pour toutes les mauvaises raisons. –

+0

J'aimerais pouvoir aussi faire griller du pain immédiatement. Vous n'êtes pas seul. – Mitchell

Répondre

4

Vous devriez de toute façon mettre des téléchargements asynchrones dans un thread séparé, afin de ne pas désactiver l'interface utilisateur du thread principal. Lorsque vous appelez une méthode d'E/S de blocage, l'interface utilisateur ne répond pas.

Consultez cette documentation au Handling Expensive Operation in the UI Thread.

+0

Je sais, mais Java a une méthode paintImmediatly que vous pouvez utiliser si vous avez besoin de peindre quelque chose même si le thread UI est bloqué. – Mitchell

+0

@Mitchell: Le problème est que si le thread de l'interface utilisateur bloque trop longtemps (je crois 5 secondes), Android suppose que votre application est gelée et affiche la boîte de dialogue ANR à l'utilisateur. Tu ne veux vraiment pas ça. –

+0

Je ne savais pas que c'était ce qui causait cela. Donc je suppose que le point est discutable. Merci tout le monde! – Mitchell

1

Comme magaio l'a déjà dit, vous devriez utiliser un autre thread pour télécharger des choses. Mes deux cents:

  • utilisation des progrès de dialogue au lieu de Toast si l'utilisateur peut effectivement voir le processus
  • Utilisez AsyncTask pour télécharger la mise à jour des progrès afin utilisateur peut réellement voir les progrès