Android Handler机制理解

什么是Handler?

Handler是Android系统给我们提供的一套用来更新UI的机制,也是一套消息处理机制,我们可以使用Handler来发送消息,也可以通过它来处理消息

Android中为什么要提供消息机制

我们都知道在android中有两个规定:

1. 网络请求操作要放到子线程。

2. 不能在子线程更新UI。所以Android中必须有线程间的通讯机制。那么为什么要有这两个规定呢?

耗时操作为什么要放在子线程中? 
答:如果在主线程一直执行代码,那么界面就会卡顿,为了提高用户体验,android增加了ANR机制,即界面长时间没有响应就会出现ANR。我们在开发中既为了避免界面卡顿,又避免出现ANR所以把耗时的操作放在子线程中。

Handler四大类?

Message:消息,其中包含了消息Id,消息处理对象以及处理的数据等,由MessageQuery统一管理,再交由Handler处理。

Handler:处理者,用于Message的发送与处理,使用Handler时需实现handlermessage(Message msg)方法来对特定的Mess处理,例如更新Ui等。

MessageQuery:消息队列,用来存放Handler发送过来的消息,并且是按照FIFO的规则执行,存放Message并不是实际意义的储存,而是将Message以链表的方式串联起来的,等待Looper的抽取

Looper:消息泵,不断地从MessageQuery中抽取Message,所以,一个MessageQuery需要一个Looper。

四大类使用概述总结?

1.在类中创建Handler对象,用来接收和处理消息 
2.然后再创建一个Loop对象,用来管理MessageQueue 
3.MessageQueue来接收和保存子线程发过来的消息 
4.上面只是做好接收消息的准备,做好相关准备后,才会让子线程发送消息 
5.子线程直接调用Handler对象,通过Handler对象的SendMessage方法来对主线程发送数据 
6.消息是保存在MessageQueue对象中的 
7.Loop控制MessageQueue传递消息给Handler对象,这里就要注意了,虽然概念上说的是Handler能对子线程的数据进行接收和处理。但实际上它是接收MessageQueue里面的数据,然后进行处理的,MessageQueue里面可以接收很多很多的数据,它们以队列的形式排列,当Handler处理完一个数据后,MessageQueue就会再传递下一个数据给Handler。 
8.上面是要重点理解的机制过程,MessageQueue对象内存放很多子线程发来的信息,有序的保存下来,并不做处理。而Handler一次只接收MessageQueue对象传来的一个数据,并进行处理。 
9.这是最后一步了,Handler对象对传来的信息进行判断,并作相应的行为。

猜你喜欢

转载自blog.csdn.net/Hyg_99/article/details/81179308