1 Handler 概念 ?

在安卓里用于管理多线程对UI的操作

2 为什么会出现Handler ?

在Android设计机制时,只允许主线程(一个程序第一次启动时所移动的线程,即UI线程)去修改主界面,那么问题来了?如何让子线程也去更新UI ?

这里就需要 Handler在新线程和主线程(UI线程)间传递消息

3 Handler的功能 ?

A 在新启动的线程中发送消息

B 在主线程中获取,处理消息

4 Handler的实现机制 ?

 Handler的实现主要依靠下面几个方法?

 void  handleMessage(Message  msg) :进程通过重写这个方法来处理消息

 sendEmptyMessage(int what) :发送空消息

5 总结:handler消息处理的三个主要角色

  A  MessageQueue :存放消息的消息队列

  B  Looper :轮循从消息队列中取出消息,然后分发

  C  Handler : 发送消息和处理消息

messagequeue和looper是一 一对应的,唯一的,一个looper可对应多个handler

6 原理总结?

当我们启动一个Android应用程序的时 候,Android会首先开启一个主线程,这个主线程的工作主要就是管理界面中的UI控件,进行事件分发,处理消息响应函数等。但是如果处理一个比较耗时 的操作时,比如读取本地大文档,读取网络数据等等时,如果依然用主线程的话,就会出现问题,Android系统规定默认5S无反应的话,就会弹出强制关闭 对话框。

在这个时候我们就需要另外开一个线程来处理耗时的工作,这与在学习SurfaceView的时候,我们开启了一个线程去处理频繁更新的操作有些类 似。但是因为子线程涉及到UI更新,而更新UI只能在主线程中更新(Android主线程不是线程安全的),子线程中操作是危险的。Handler就是用 来解决这个复杂问题而出现的。Handler运行在主线程中(UI线程中),它与子线程可以通过Message对象来传递数据,这个时候,Handler就承担着接受子线程传过来的(子线程用sendMessage()方法传递)Message对象(里面包含数据),把这些消息放入主线程队列中,配合主线程进行更新UI。

7开发带有Handler类的程序步骤?

A  在Activity或Activity的Widget中开发Handler类的对象,并重写handleMessage方法。

B  在新启动的线程中调用sendEmptyMessage或者sendMessage方法向Handler发送消息。

C  Handler类的对象用handleMessage方法接收消息,然后根据消息的不同执行不同的操作。