根据书上P345的说法,更新UI必须在主线程中进行
然后举了一个例子,进行一个按键控制,然后在按键的事件中new一个线程,然后里面text.setText("Nice to meet you");
然后程序就报错了。
此时,如何操作呢?
这就是android提供的异步消息处理机制出场了
先要来一个UPDATE_TEXT的常量为1;
然后new一个handler()具体操作
private Handler handler=new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case: UPDATE_TEXT:text.setText("nice to meet you");
break;
default:
break;
}
}
}
按键事件里面需要new一个Thread
在里面new一个message
给message.what里面赋值为UPDATE_TEXT
然后将message送到handler
new Thread (new Runnable(){
Message message=new Message();
message.what=UPDATE_TEXT;
handler.sendMessage(message);
}).start();
主要是handler这个是在主线程中,从子线程中传出数据来,然后在handler中处理,就避免了在子线程中进行UI 操作了。
解析异步消息处理机制
四个部分 Message Handler MessageQueue Looper
Message在线程之间传递消息,除了what字段,还有arg1、arg2字段携带整型,obj携带Object对象
Handler 用于发送和处理消息 发送 sendMessage() 会传送到handler 的handleMessage的方法中处理
MessageQueue 存放等待处理的消息
Looper 有一个loop方法,从MessageQueue中不断取出消息来处理