post : post спричиняє додавання Runnable до черги повідомлень,
Виконання: представляє команду, яку можна виконати. Часто використовується для запуску коду в іншій темі.
run () : запускає виконання активної частини коду класу '. Цей метод викликається при запуску потоку, створеного з класом, який реалізує Runnable.
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
код :getView().startAnimation(a);
у своєму коді,
post викликає Runnable ( код буде запущений у різному потоці) для додавання черги повідомлень.
Тож startAnimation буде запущений у новій темі, коли він отриманий із повідомленняQueue
[EDIT 1]
Чому ми використовуємо новий потік замість потоку інтерфейсу (основний потік)?
Нитка інтерфейсу користувача:
Коли програма запущена, нитка Ui створюється автоматично
він відповідає за пересилання подій до відповідних віджетів, і це включає події малювання.
Це також нитка, з якою ви взаємодієте з віджетами Android
Наприклад, якщо ви торкаєтесь кнопки на екрані, потік інтерфейсу передає подію дотику до віджета, який, у свою чергу, встановлює його натиснутий стан і розміщує недійсний запит у черзі подій. Нитка користувальницького інтерфейсу знімає запит і сповіщає віджет про перемальовування себе.
Що станеться, якщо користувач натисне кнопку, яка буде робити довгуоперацію?
((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 (Runnable)
- View.post (Runnable)
- View.postDelayed (Виконується, довго)
- Обробник
Як і нижче,
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();
}
Обробник
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/painless-threading.html
http://www.aviyehuda.com/blog/2010/12/20/android-multithreading-in-a-ui-environment/