android Hanlder原理分析

来源:互联网 发布:新星星知我心 编辑:程序博客网 时间:2024/06/10 05:42

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可以使用子线程的消息队列


0 0