Android程序员面试笔试宝典
上QQ阅读APP看书,第一时间看更新

1.2.4 Handler机制

在Android中UI线程是不安全的,但实际开发中会有要在子线程去更新UI控件的情况出现,那该怎么办?这时可以使用Android的异步消息处理机制,也就是通过Handler机制来解决。可以在要更新UI控件的那个子线程里创建Message对象,并且定义一个what字段并赋值,然后调用Handler对象的sendMessage()将这条Message发送出去,最后创建Handler对象,接收刚刚发出去的消息,在其handleMessage()里面进行处理,因为handleMessage()是在主线程运行的,所以当然能在这里对UI控件进行更新操作了。

Hanler异步消息机制主要有4部分组成:Message、Handler、MessageQueue和Looper:

1)Message:线程间传递的消息,可在消息里添加一些字段,用于识别不同的线程;

2)Handler:消息处理者,用于发送和处理消息。用sendMessage()发送消息,用handleMessage()接收消息并处理;

3)MessageQueue:消息队列,用来存储所有发送的消息,等待被处理,每个线程只有一个MessageQueue对象;

4)Looper:相当于管理者,执行loop(),就会进入循环状态,每发现MessageQueue里有一条消息,就取出该条消息将它传递给Handler的handleMessage()中。

以上其实就是一条消息从子线程到主线程的过程,所以也就能通过该机制来对UI控件进行更新操作。