一、Handler基本概念

1,接收子线程发送的数据,并用该数据配合主线程更新UI,子线程和主线程通信的工具。

2,Handler定义在主线程中也就是UI线程中。

3,Handler充当主线程和子线程的之间交互的中介。

4,Hander在启动新的子线程中发送消息

二、常用的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//发送消息
new Handler().sendMessage(message);
//延时1s发送消息
new Handler().sendMessageDelayed(message, 1000);
//发送带标记的消息(内部创建了message,并设置msg.what = 0x1)
new Handler().sendEmptyMessage(0x1);
//延时1s发送带标记的消息
new Handler().sendEmptyMessageDelayed(0x1, 1000);
//检查消息队列中是否包含what所指定的消息
new Handler().hasMessage(int what)


//避免内存泄露的方法:
//移除标记为0x1的消息
new Handler().removeMessages(0x1);
//移除回调的消息
new Handler().removeCallbacks(Runnable);
//移除回调和所有message
new Handler().removeCallbacksAndMessages(null);

三、创建流程

创建Handler

1
2
3
4
5
6
7
8
9
10
11
Handler mhandler = new Handler(){
public void handleMessage(Message msg)
{
switch (msg.what){
//case后必须跟常量,即为final的
case CURRENT_MSG:
t.setText("ggg");
break;
}
};
};

创建Thread对象

1
2
3
4
5
6
7
8
Thread mThread = new Thread(){
public void run()
{
Message msg= mhandler.obtainMessage();
msg.what=CURRENT_MSG;
mhandler.sendMessage(msg);
};
};

四、Handler,Thread存在的意义

1,方便使用:方便初始化和方便获取线程Looper。

2,保证线程安全。

五、Handler的工作机制

android.os.Message—用于封装线程之间传递的消息。

android.os.MessageQueue—消息队列,用于负责接收并处理Handler发送过来的消息。

android.os.Looper—每个线程对应一个Looper,负责消息队列的管理,将消息从队列中取出交给Handler处理。