一些耗时的工作,不可以让主线程去处理,所以得开一个子线程,比如联网通信,但是子线程不能更新UI,所以用到Handler
Handler 用法:在子线程中把数据发送出去
public void run() {
Message message = new Message();
message.what = UPDATE_TEXT;
handler.sendMessage(message); // 将Message对象发送出去
}
然后在主线程中new一个 Handler,获取传回来的数据进行UI处理
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;
}
}
};
过程
1.首先需要在主线程当中创建一个 Handler 对象,并重写
handleMessage()方法。
2.然后当子线程中需要进行 UI 操作时,就创建一个 Message 对象,并
通过 Handler 将这条消息发送出去。
3.之后这条消息会被添加到 MessageQueue 的队列中等待
被处理,而 Looper 则会一直从 MessageQueue 中取出待处理消息,最后分发回 Handler的 handleMessage()方法中。由于 Handler 是在主线程中创建的,所以此时 handleMessage()方法中的代码也会在主线程中运行,于是我们在这里就可以安心地进行 UI 操作了。