Bonjour,
Oui , tu as juste .Mais il y a bien que l'UIThread qui peut modifie les éléments de la vue ? Normalement si j'essaye de changer un élément contenu dans ma view depuis un autre thread, je devrai recevoir une erreur de ce type là
Le Handlernon ? Je pensais que le Handler était une sorte d'observer qui faisait la liaison entre l'UIThread et les autres Thread et donc que son code était plus ou moins rattaché à celui de l'UIThread.
http://developer.android.com/referen...s/Handler.htmlA Handler allows you to send and process Message and Runnable objects associated with a thread's MessageQueue. Each Handler instance is associated with a single thread and that thread's message queue. When you create a new Handler, it is bound to the thread / message queue of the thread that is creating it -- from that point on, it will deliver messages and runnables to that message queue and execute them as they come out of the message queue.
Oui c'est pour préciser à ton thread que tu aimerais qu'il tourne directement sur l'UIThread ce qui n'est pas le cas si tu utilises la procédure run .L'utilisation de la fonction runOnUiThread se fait directement dans le thread
Par contre cela implique qu'il utilise déjà un thread existant (UIThread) et non un nouveau thread .
Si ils servent à plein de chose pas seulement pour l'affichage de la vue .oui alors je le fais dans le Handler ? Si c'est la première solution est la bonne, les Handler ne servent à rien au final s'ils ne peuvent pas interagir sur la vue.
La gestion des messages (envoie, réception), les observers sur le changement de donnée , ...
Tu peux utiliser les handlers ou the thread (run), par contre comme tu l'as souligné il faudra utilisé le postinvalidate sur toutes modifications de la vue , pour indiquer que cette méthode doit bien se faire dans l'UIThread et non dans le thread actuel .Par contre j'ai un plus de mal à voir l'utilisation de invalidate(), postInvalidate(). D'après ce que j'ai compris, on surcharge la méthode invalidate pour qu'elle fasse ce que l'on veut et après on fait myImageView.postInvalidate(); pour appeler la méthode. Je ne vois pas la différence qu'il y a entre les 2 méthodes.
En gros
invalidate -> appel d'un UIThread
postinvalidate-> appel d'un Non UI Thread
tu as les autres méthodes à ce lienpublic void postInvalidate ()
Since: API Level 1
Cause an invalidate to happen on a subsequent cycle through the event loop. Use this to invalidate the View from a non-UI thread.
See Also
* invalidate()
http://developer.android.com/guide/t...d-threads.html
* Activity.runOnUiThread(Runnable)
* View.post(Runnable)
* View.postDelayed(Runnable, long)
,essayes alors de réduire la taille de la première avant de télécharger la seconde, à mois que tu ne sois obligé de garder la qualité de l'image . Sinon c'est làSinon j'ai fait le test ce matin. Effectivement ca marche bien mieux quand je recycle l'image juste avant d'insérer la nouvelle, sauf dans le cas ou ce sont de très grande image... En effet il n'y a pas la place pour deux images sur la mémoire de l'application. Je vais être obligé de recycler mon image avant de télécharger la nouvelle.
http://developer.android.com/referen...,%20boolean%29
Au pire tu peux toujours la compresser,
http://developer.android.com/referen...utputStream%29
Partager