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方法接收消息,然后根据消息的不同执行不同的操作。