post:post导致将Runnable添加到消息队列中,
Runnable:表示可以执行的命令。通常用于在其他线程中运行代码。
run() :开始执行该类代码的活动部分。当启动使用实现Runnable的类创建的线程时,将调用此方法。
getView().post(new Runnable() {
@Override
public void run() {
getView().startAnimation(a);
}
});
代码:getView().startAnimation(a);
在您的代码中
post导致Runnable(代码将在另一个线程中运行)添加消息队列。
因此,当从messageQueue中获取startAnimation时,它将在新线程中触发
[编辑1]
为什么我们使用新线程而不是UI线程(主线程)?
UI线程:
例如,如果您触摸屏幕上的a按钮,则UI线程将touch事件调度到窗口小部件,窗口小部件依次设置其按下状态并将无效请求发布到事件队列。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(Runnable)
- 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/