- handler sendMessage方式
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_TEXT:
// 在这里可以进行UI操作
text.setText("Nice to meet you");
break;
default:
break;
}
}
};
new Thread(new Runnable() {
@Override
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message); // 将Message对象发送出去
}
}).start();
- handler post方式
handler.post(new Runnable() {
@Override
public void run() {
textView.setText("更新UI方法三");
}
});
//Handler.post的调用过程
public final boolean post(Runnable r){
return sendMessageDelayed(getPostMessage(r), 0);
}
最终还是会调用到handler.sendMessageDelayed(Message msg, long delayMillis)方法
- runOnUiThread方式
runOnUiThread(new Runnable() {
@Override
public void run() {
textView.setText("更新UI方法二");
}
});
源码分析:
public final void runOnUiThread(Runnable action) {
if (Thread.currentThread() != mUiThread) {
mHandler.post(action);
} else {
action.run();
}
}
从上面的源码中可以看出是先调用handler.post(Runnable r),
最终还是会调用到
handler.sendMessageDelayed(Message msg, long delayMillis)
方法来发送消息
- view post方式
view.post(new Runnable() {
@Override
public void run() {
textView.setText("更新UI方法四");
}
});
public boolean post(Runnable action) {
final AttachInfo attachInfo = mAttachInfo;
if (attachInfo != null) {
return attachInfo.mHandler.post(action);
}
// Postpone the runnable until we know on which thread it needs to run.
// Assume that the runnable will be successfully placed after attach.
getRunQueue().post(action);
return true;
}
先调用handler.post(Runnable r),最终还是会调用到handler.sendMessageDelayed(Message msg, long delayMillis)方法