poste :post provoque l'ajout du Runnable à la file d'attente des messages,
Runnable : Représente une commande qui peut être exécutée. Souvent utilisée pour exécuter du code dans un Thread différent.
exécuter () : Commence à exécuter la partie active du code de la classe. Cette méthode est appelée lors du démarrage d'un thread qui a été créé avec une classe qui implémente Runnable.
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
code : getView().startAnimation(a);
dans votre code,
fait en sorte que le Runnable (le code sera exécuté dans un thread différent) pour ajouter la file d'attente des messages.
Ainsi, startAnimation sera déclenchée dans un nouveau fil d'exécution lorsqu'elle sera récupérée dans la base de données de l'UE. messageQueueue
[EDIT 1]
Pourquoi utiliser un nouveau thread au lieu du thread UI (main thread) ?
UI Thread :
-
Lorsque l'application est lancée, l'Ui Thread est créé automatiquement.
-
il est chargé de distribuer les événements aux widgets appropriés. et cela inclut les événements de dessin.
-
C'est aussi le fil conducteur qui vous permet d'interagir avec les widgets Android avec
Par exemple, si vous touchez un bouton à l'écran, le thread de l'interface utilisateur transmet l'événement de contact au widget qui, à son tour, définit ses paramètres. envoie l'événement tactile au widget qui, à son tour, définit son état état enfoncé et envoie une demande d'invalidation à la file d'attente des événements. Le thread d'interface utilisateur thread de l'interface utilisateur met la demande en file d'attente et notifie au widget de redessiner lui-même.
Que se passe-t-il si un utilisateur appuie sur un bouton qui déclenche une opération longue ?
((Button)findViewById(R.id.Button1)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
});
L'interface utilisateur se fige. Le programme peut même se bloquer.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
Il enfreint la règle d'Android selon laquelle ne jamais mettre à jour l'interface utilisateur directement à partir du fil de travail
Android offre plusieurs façons d'accéder au thread de l'interface utilisateur à partir d'autres threads.
- Activité.runOnUiThread(Runnable)
- View.post(Runnable)
- View.postDelayed(Runnable, long)
- Manipulateur
Comme ci-dessous,
View.post(Runnable)
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.post(new Runnable() {
public void run() {
mImageView.setImageBitmap(b);
}
});
}
}).start();
}
Manipulateur
final Handler myHandler = new Handler(Looper.getMainLooper());
(new Thread(new Runnable() {
@Override
public void run() {
final Bitmap b = loadImageFromNetwork();
myHandler.post(new Runnable() {
@Override
public void run() {
mImageView.setImageBitmap(b);
}
});
}
})).start();
}
Pour plus d'informations
http://Android-developers.blogspot.com/2009/05/painless-threading.html
http://www.aviyehuda.com/blog/2010/12/20/Android-multithreading-in-a-ui-environment/