post : post вызывает добавление Runnable в очередь сообщений,
Runnable: представляет команду, которую можно выполнить. Часто используется для запуска кода в другом потоке.
run () : запускает выполнение активной части кода класса. Этот метод вызывается при запуске потока, созданного с помощью класса, реализующего Runnable.
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
код :getView().startAnimation(a);
в вашем коде,
post заставляет Runnable ( код будет запущен в другом потоке) добавить очередь сообщений.
Итак, startAnimation будет запущен в новом потоке, когда он будет получен из messageQueue.
[ИЗМЕНИТЬ 1]
Почему мы используем новый поток вместо потока пользовательского интерфейса (основного потока)?
UI поток:
При запуске приложения Ui Thread создается автоматически
он отвечает за отправку событий в соответствующие виджеты, включая события рисования.
Это также поток, с которым вы взаимодействуете с виджетами Android.
Например, если вы касаетесь кнопки a на экране, поток пользовательского интерфейса отправляет событие касания виджету, который, в свою очередь, устанавливает свое состояние нажатия и отправляет недействительный запрос в очередь событий. Поток пользовательского интерфейса выводит запрос из очереди и уведомляет виджет о необходимости перерисовки.
Что произойдет, если пользователь нажмет кнопку, которая будет работать долго?
((Button)findViewById(R.id.Button1)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
});
Пользовательский интерфейс зависает. Программа может даже вылететь.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
Это нарушает правило Android, которое никогда не обновляет пользовательский интерфейс непосредственно из рабочего потока.
Android предлагает несколько способов доступа к потоку пользовательского интерфейса из других потоков.
- Activity.runOnUiThread (запускаемый)
- View.post (запускаемый)
- View.postDelayed (запускается, долго)
- Обработчик
Как показано ниже,
View.post (запускаемый)
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();
}
Обработчик
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();
}

Для получения дополнительной информации
http://android-developers.blogspot.com/2009/05/pxygen-threading.html
http://www.aviyehuda.com/blog/2010/12/20/android-multithreading-in-a-ui-environment/