什么是Handler
今天刚刚接触了handler,Handler被翻译成句柄,换句话说就是一个主线程和子线程传递消息的中介,简单理解,Handler就是解决线程和线程之间的通信的。当我们需要在子线程处理耗时的操作,需要更新UI,就需要使用Handler来处理,因为子线程不能做更新UI的操作。Handler能很容易的把任务传入主线程。
组成
sendEmptyMessage():发送消息
sendMessage:发送消息
obtainMessage:获得Message对象
重点原理
- 子线程通过与主线程通信来更新UI
- 主线程(UI线程)不允许进行耗时操作,所以耗时操作都在子线程进行
代码展示:按钮监听,文字框接收内容
downloadbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
downloadtips.setText("下载完成");
Looper和MessageQueue(工作机制)
Handler的消息处理
MessageQueue:消息队列(子线程有顺序的发送信息给主线程的聚集地)
Looper:将子线程发送的消息从聚集地取出送给主线程的角色
如何使用Handleder
- 在UI创建Handler匿名内部类对象
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
- 在子线程中发送消息
new Thread(new Runnable() {
@Override
public void run() {
try{
Thread.sleep(5000);
}catch (InterruptedException e){
e.printStackTrace();
}
Message message=handler.obtainMessage();//创建message对象
message.what=1;
message.arg1=2;