post : post entraîne l'ajout du Runnable à la file d'attente des messages,
Exécutable: représente une commande qui peut être exécutée. Souvent utilisé pour exécuter du code dans un thread différent.
run () : Démarre l'exécution de la partie active du code de la classe. Cette méthode est appelée lorsqu'un thread est démarré 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,
post provoque le Runnable (le code sera exécuté dans un thread différent) pour ajouter la file d'attente de messages.
Donc startAnimation sera déclenché dans un nouveau thread lorsqu'il est extrait de messageQueue
[EDIT 1]
Pourquoi utilisons-nous un nouveau thread au lieu du thread UI (thread principal)?
Fil de discussion de l'interface utilisateur:
Lorsque l'application est lancée, 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 avec lequel vous interagissez avec les widgets Android
Par exemple, si vous touchez le bouton a à l'écran, le thread d'interface utilisateur distribue l'événement tactile au widget qui à son tour définit son état enfoncé et publie une demande d'invalidation dans la file d'attente d'événements. Le thread d'interface utilisateur supprime la demande et notifie au widget de se redessiner.
Que se passe-t-il si un utilisateur appuie sur un bouton qui fera une longue opération?
((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 planter.
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 Android qui ne met jamais à jour l'interface utilisateur directement à partir du thread de travail
Android propose plusieurs façons d'accéder au thread d'interface utilisateur à partir d'autres threads.
- Activity.runOnUiThread (exécutable)
- View.post (Exécutable)
- View.postDelayed (Exécutable, long)
- Gestionnaire
Comme ci-dessous,
View.post (Exécutable)
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();
}
Gestionnaire
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/