post : post, Runnable'ın mesaj kuyruğuna eklenmesine neden olur,
Runnable: Yürütülebilen bir komutu temsil eder. Genellikle kodu farklı bir Thread'de çalıştırmak için kullanılır.
run () : Sınıfın kodunun aktif bölümünü çalıştırmaya başlar. Bu yöntem, Runnable'ı uygulayan bir sınıfla oluşturulan bir iş parçacığı başlatıldığında çağrılır.
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
kod :getView().startAnimation(a);
kodunuzda,
post, Runnable'ın ( kod farklı bir iş parçacığında çalıştırılacak) mesaj kuyruğunu eklemesine neden olur .
Yani startAnimation, messageQueue'dan alındığında yeni bir iş parçacığında tetiklenecek
[DÜZENLE 1]
Neden UI iş parçacığı (ana iş parçacığı) yerine yeni bir iş parçacığı kullanıyoruz?
UI İş Parçacığı:
Uygulama başladığında, Ui Thread otomatik olarak oluşturulur
olayları uygun aletlere göndermekten sorumludur ve bu çizim olaylarını içerir.
Aynı zamanda Android widget'larıyla etkileşim kurduğunuz konu
Örneğin, ekrandaki bir düğmeye dokunursanız, UI iş parçacığı dokunmatik olayını parçacığa gönderir ve bu da daha sonra basılmış durumunu ayarlar ve olay kuyruğuna bir geçersiz kılma isteği gönderir. UI iş parçacığı, isteği çıkarır ve parçacığın kendisini yeniden çizmesi için bilgilendirir.
Bir kullanıcı longOperation yapacak bir düğmeye basarsa ne olur?
((Button)findViewById(R.id.Button1)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
});
Kullanıcı arayüzü donuyor. Hatta program çökebilir.
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
Kullanıcı arayüzünü hiçbir zaman doğrudan çalışan iş parçacığından güncellemeyen android kuralını bozar
Android, UI iş parçacığına diğer iş parçacıklarından erişmenin birkaç yolunu sunar.
- Activity.runOnUiThread (Çalıştırılabilir)
- View.post (Çalıştırılabilir)
- View.postDelayed (Runnable, long)
- İşleyici
Aşağıdaki gibi
View.post (Çalıştırılabilir)
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();
}
İşleyici
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();
}

Daha fazla bilgi için
http://android-developers.blogspot.com/2009/05/peless-threading.html
http://www.aviyehuda.com/blog/2010/12/20/android-multithreading-in-a-ui-environment/