Comment actualiser l'affichage de l'image immédiatement
Dans mon application android, j'ai télécharger une image à partir du cloud. Le téléchargement est effectué dans un thread et dans le même thread, j'ai également l'affichage de l'image avec la nouvelle image téléchargée. Après la définition de l'image, je puis appeler postinvalidate()
.
Cependant, l'image ne s'affiche pas immédiatement. Est-il un moyen de faire le rafraîchissement se produire immédiatement? J'ai besoin d'un moyen de déclencher un dessin de cycle.
source d'informationauteur user1583075
Vous devez vous connecter pour publier un commentaire.
Chaque classe qui est dérivée de la classe de la Vue a la
invalidate()
et lapostInvalidate()
méthode. Siinvalidate()
est appelée, elle indique au système que le point de vue actuel a changé et qu'il doit être redessiné dès que possible. Comme cette méthode ne peut être appelée à partir de votre UIThread une autre méthode est nécessaire pour quand vous êtes pas dans le UIThread et vous souhaitez en informer le système que votre point de Vue a été changé. LepostInvalidate()
méthode informe le système à partir d'un non-UIThread et la Vue est redessiné dans le prochaine eventloop sur l'UIThread dès que possible.Dans votre cas, vous pouvez obtenir ce que vous voulez avec l'aide de
AsyncTask
(intelligent backround thread).AsyncTask permet une utilisation facile et de le thread d'INTERFACE utilisateur. Cette classe permet d'effectuer des opérations d'arrière-plan (télécharger l'image en arrière-plan dans votre cas) et de publier les résultats (à définir votre image bitmap à votre ImageView) sur le thread de l'INTERFACE utilisateur sans avoir à manipuler les threads et/ou les gestionnaires.Une tâche asynchrone est défini par un calcul qui s'exécute sur un thread d'arrière-plan et dont le résultat est publié sur le thread d'INTERFACE utilisateur. Une tâche asynchrone est défini par 3 types génériquesappelé Params, le Progrès et la Raison, et 4 étapesappelé commencer, doInBackground, processProgress et de fin.
Les 4 étapes
Lors d'une tâche asynchrone est exécutée, la tâche passe par 4 étapes:
onPreExecute()
invoquée sur le thread d'INTERFACE utilisateur immédiatement après l'exécution de la tâche. Cette étape est normalement utilisé pour la configuration de la tâche, par exemple en affichant une barre de progression dans l'interface utilisateur avant de télécharger l'image de nuage et qui est utilisé pour fournir une bonne expérience utilisateur .doInBackground(Params...)
invoquée sur le thread d'arrière-plan immédiatement après onPreExecute() termine son exécution. Cette étape est utilisée pour effectuer le calcul de fond, qui peut prendre beaucoup de temps. Les paramètres de la tâche asynchrone sont passés à cette étape. Le résultat du calcul doit être retourné par cette étape et sera renvoyé à la dernière étape. Cette étape peut également utiliser publishProgress(le Progrès...) de publier une ou plusieurs unités de progrès. Ces valeurs sont publiées sur le thread de l'INTERFACE utilisateur, le onProgressUpdate(le Progrès...).onProgressUpdate(Progress...)
invoquée sur le thread de l'INTERFACE utilisateur après un appel àpublishProgress(Progress...)
. Le moment de l'exécution n'est pas défini. Cette méthode est utilisée pour afficher toute forme de progrès dans l'interface utilisateur, tandis que le calcul d'arrière-plan est toujours en cours d'exécution.onPostExecute(Result)
invoquée sur le thread de l'INTERFACE utilisateur après le calcul de fond de finitions. Le résultat du calcul d'arrière-plan est transmis à cette étape en tant que paramètre à la méthode, vous pouvez définir l'image de votre imageView et invalider votre point de vueAvez-vous essayez d'utiliser
invalidate()
? C'forces de redessiner la vue immédiatement et non pas au cours du prochain cycle deInvalider ne fonctionne pas. Modification de l'uri ou l'url ou le chemin de l'image temporairement et de changer à nouveau le chemin d'accès requis œuvres. Par exemple, si j'ai
Je peux actualiser ce que: