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スレッド:
アプリケーションが起動すると、Uiスレッドが自動的に作成されます
これは、適切なウィジェットへのイベントのディスパッチを担当し、これには描画イベントが含まれます。
また、Androidウィジェットとやり取りするスレッドでもあります。
たとえば、画面上のボタンにタッチすると、UIスレッドがタッチイベントをウィジェットに送出し、ウィジェットが押された状態を設定して、無効化リクエストをイベントキューにポストします。UIスレッドはリクエストをデキューし、ウィジェットに再描画するよう通知します。
ユーザーがlongOperationを実行するボタンを押すとどうなりますか?
((Button)findViewById(R.id.Button1)).setOnClickListener(
new OnClickListener() {
@Override
public void onClick(View v) {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
});
UIがフリーズします。プログラムがクラッシュすることさえあります。
public void onClick(View v) {
new Thread(new Runnable() {
public void run() {
final Bitmap b = loadImageFromNetwork();
mImageView.setImageBitmap(b);
}
}).start();
}
ワーカースレッドから直接UIを更新しない Androidルールに違反します
Androidには、他のスレッドからUIスレッドにアクセスする方法がいくつかあります。
- 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/painless-threading.html
http://www.aviyehuda.com/blog/2010/12/20/android-multithreading-in-a-ui-environment/