UI Thred(UI线程)push指示消息到MessageQueue(消息队列)当中,之后进入到Looper(消息处理通道)中进行处理,Handler(消息指示接收)根据Looper发送出来的消息执行UI/数据更新等操作。
举一常用例子,用Message在子线程当中实现界面数据更新。
1.自制Handler对消息进行处理
private class MyHandler extends Handler{
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch(msg.what){
case UPDATE ://在收到消息时,对界面进行更新
mText.setText("This update by message");
break;}
}
}
2.建立新的线程发送消息
private void updateByMessage() {
//匿名对象
new Thread() {
public void run() {//UPDATE是一个自己定义的整数,代表了消息ID
Message msg = mHandler.obtainMessage(UPDATE);
mHandler.sendMessage(msg);
}
}.start();
}
补充一下,AsyncTask本事就是一线程池,与Handler相比是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。但是相对Handler而言要更耗资源,且更新UI比较复杂。(两者的特点与区别可查看原文)