post : post bewirkt, dass Runnable zur Nachrichtenwarteschlange hinzugefügt wird.
Runnable: Stellt einen Befehl dar, der ausgeführt werden kann. Wird häufig verwendet, um Code in einem anderen Thread auszuführen.
run () : Startet die Ausführung des aktiven Teils des Klassencodes. Diese Methode wird aufgerufen, wenn ein Thread gestartet wird, der mit einer Klasse erstellt wurde, die Runnable implementiert.
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
Code :getView().startAnimation(a);
in Ihrem Code,
post bewirkt, dass Runnable (der Code wird in einem anderen Thread ausgeführt) die Nachrichtenwarteschlange hinzufügt.
StartAnimation wird also in einem neuen Thread ausgelöst, wenn es aus der messageQueue abgerufen wird
[EDIT 1]
Warum verwenden wir einen neuen Thread anstelle des UI-Threads (Haupt-Thread)?
UI-Thread:
Wenn die Anwendung gestartet wird, wird der UI-Thread automatisch erstellt
Es ist für den Versand der Ereignisse an die entsprechenden Widgets verantwortlich, einschließlich der Zeichenereignisse.
Es ist auch der Thread, mit dem Sie mit Android-Widgets interagieren
Wenn Sie beispielsweise die Schaltfläche a auf dem Bildschirm berühren, sendet der UI-Thread das Berührungsereignis an das Widget, das seinerseits den Status "gedrückt" festlegt und eine ungültige Anforderung an die Ereigniswarteschlange sendet. Der UI-Thread stellt die Anforderung in die Warteschlange und benachrichtigt das Widget, sich selbst neu zu zeichnen.
Was passiert, wenn ein Benutzer eine Taste drückt, die longOperation ausführt?
((Button)findViewById(R.id.Button1)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
});
Die Benutzeroberfläche friert ein. Das Programm kann sogar abstürzen.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
Es verstößt gegen die Android-Regel, die die Benutzeroberfläche niemals direkt vom Arbeitsthread aus aktualisiert
Android bietet verschiedene Möglichkeiten, um von anderen Threads aus auf den UI-Thread zuzugreifen.
- Activity.runOnUiThread (ausführbar)
- View.post (Runnable)
- View.postDelayed (lauffähig, lang)
- Handler
Wie unten,
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();
}
Handler
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();
}

Für mehr Information
http://android-developers.blogspot.com/2009/05/painless-threading.html
http://www.aviyehuda.com/blog/2010/12/20/android-multithreading-in-a-ui-environment/