Handler作用:
1)执行计划任务,你可以再预定的实现执行某些任务,可以模拟定时器
2)线程间通讯,在android应用启动时,会创建一个主线程,主线程会创建一个消息队列来处理各种消息。当你创建子线程时,你可以在你的子线程中拿到父线程中创建的Handler对象,就可以通过该对象向父线程的消息队列发送消息了。由于Android要求在UI线程更新界面,因此,可以通过该办法在其他线程中更新界面了。
一、角色描述
1、Looper(相当隧道)一个线程可以产生一个Looper对象,由它来管理此线程里的Message Queue
2、Handler,你可以构造Handler对象与Looper对象沟通,以便push新消息到Message Queue里,或者接受Looper(从Message Queue取出)所送来的消息
3、Message Queue用来存放线程放入的消息。
4、线程:UI thread 通常就是main thread,而Android启动程序时会替它建立一个Message Queue。
每一个线程里可含有一个Looper对象以及一个Message Queue 数据结构,在你的应用程序里,可以定义Handler的子类别来接受Looper所送出的消息。
二、问题
1、在主线程定义Handler1和Handler2,Handler1.sendMassage Handler2是否能接受到,答案是:不能
2、主线程就一个消息队列,为什么不同的Handler不能共享消息呢,因为通过消息what来标识不同Handler消息的。
3、子线程默认没有消息队列的,所以在子线程创建Handler会抛出没有Looper异常
4、子线程使用HandlerThread,默认有消息队列
5、子线程的Handler可以使用子线程的消息队列