一、Handler的定义:
主要接受子线程发送的数据, 并用此数据配合主线程更新UI。
当应用程序启动时,Android首先会开启一个相应的主线程 (也就是UI线程) , 主线程为管理界面中的UI控件, 进行事件分发, 比如说你要是点击一个 Button ,Android会分发事件到Button上,来响应你的操作。Handler运行在主线程中(UI线程中), 它与子线程可以通过Message对象来传递数据, Handler就承担着接受子线程传过来的Message对象(用sendMessage(),里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。
二、Thread 和 Handler 基本格式
(1).第一种方式:创建一个子类继承Thread
Class MyThread extends Thread{
Public void run(){
//业务处理语句
}
}
启动子线程语句:new MyThread().start();
(2).第二种方式:创建一个子类实现Runnable接口
Class MyThread implements Runnable{
Public void run(){
//业务处理语句
}
}
启动子线程语句:MyThread myThread = new MyThread()
New Thread(myThread ).start();
(3).第三种方式:匿名类
New Thread(new Runnable()){
Public void run(){
//业务处理语句
}
}).start();
(4).handle的写法创建一个类继承Handler,重写handleMessage
Class Myandler extends Handler{
@Override
Public void handleMessage(Message msg) {
Super.handle Message(msg);
switch(msg.what) {
Case UPDATE_TEXT:// 接受到消息之后,对UI控件进行修改
//业务处理语句
break;
}
}
}
三、Handler Message MessageQueue Looper 说明
Public void onClick(View v) {
switch(v.getId()) {
Case R.id.bt_sendMessage:
New Thread(newRunnable() {
@Override
Public void run() {// 新建一个线程,并新建一个Message的对象,是用Handler的对象发送这个Message
Message msg =newMessage();
msg.what = UPDATE_TEXT;// 用户自定义的一个值,用于标识不同类型的消息
hd.sendMessage(msg);// 发送消息
}
}).start();
break;
}
Class Myandler extends Handler{
@Override
Public void handleMessage(Message msg) {
Super.handle Message(msg);
switch(msg.what) {
Case UPDATE_TEXT:// 接受到消息之后,对UI控件进行修改
tv.setText("修改成功!");
break;
}
}
}
Handler:消息处理着,可以用来发送消息和接收消息。发送消息用sendMessage(),发出去的消息最后会回到handleMessage()方法中。
Message:在线程中传递消息,本身可以携带少量的信息,what字段可以用来区分不同线程传来的值,一般会定义一些常量。
MessageQueue:消息队列,它用于存放所有通过Handler发送的消息,等待被处理。
Looper:是MessageQueue 消息队列管家,调用looper()方法,就会进入一种循环状态,只要发现MessageQueue 消息队列有新的消息就会被发现,并传递到Handler的handleMessage()方法中。