1 Handler机制
异步消息处理线程启动后会进入一个无限的循环体中 每循环一次 从其内部的消息队
列中取出一个消息 然后回调相应的消息处理函数 执行完成一个消息后则继续循环
若消息队列为空 线程阻塞等待
代码执行流程
1、首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个
MessageQueue对象;因为Looper.prepare()在一个线程中只能调用一次,所以
MessageQueue在一个线程中只会存在一个。
2、Looper.loop()会让当前线程进入一个无限循环,不端从MessageQueue的实例中读
取消息,然后回调msg.target.dispatchMessage(msg)方法。
3、Handler的构造方法,会首先得到当前线程中保存的Looper实例,进而与Looper实
例中的MessageQueue想关联。
4、Handler的sendMessage方法,会给msg的target赋值为handler自身,然后加入
MessageQueue中。
5、在构造Handler实例时,我们会重写handleMessage方法,也就是
msg.target.dispatchMessage(msg)最终调用的方法。
Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线程
之间交换数据
Message 的what 字段,除此之外还可以使用arg1 和arg2 字段来携带一些整型
数据,
使用obj 字段携带一个Object 对象
Handler 处理者 主要是用于发送和处理消息的 发送消息一般是使用Handler 的
sendMessage()方法,
而发出的消息经过一系列地辗转处理后,最终会传递到Handler 的
handleMessage()方法中
MessageQueue
消息队列 存放所有通过Handler 发送的消息。这部分消息会一直存在于消息队
列中,等待被处理。
每个线程中只会有一个MessageQueue对象
Looper
每个线程中的MessageQueue 的管家,调用Looper 的loop()方法后,就会
进入到一个无限循环当中,然后每当发现MessageQueue 中存在一条消息,就会
将它取
出,并传递到Handler 的handleMessage()方法中。每个线程中也只会有一个
Looper 对象