Handler的机制

来源:互联网 发布:情感知乎 编辑:程序博客网 时间:2024/05/17 01:54
android的消息处理有三个核心类: Looper,Handler Message。其实还有一个 Message Queue(消息队列),但是 Message Queue被封装到 Looper里面了,我们不会直接与 Message Queue打交道。
l Looper Looper的字面意思是“循环者”,它被设计用来使一个普通线程变成 Looper线程。所谓 Looper线程就是循环工作的线程。在程序开发中(尤其是 GUI开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是 Looper线程。
n Looper.prepare():现在你的线程中有一个 Looper对象,它的内部维护了一个消息队列。注意,一个 Thread只能有一个 Looper对象


Looper.loop():调用loop 方法后,Looper线程就开始真正工作了,它不断从自己的 MQ中取出队头的消息 (也叫任务 )执行




Handler handler扮演了往 MQ上添加消息和处理消息的角色(只处理由自己发出的消息),即通知 MQ它要执行一个任务 (sendMessage),并在 loop到自己的时候执行该任务 (handleMessage),整个过程是异步的。 handler创建时会关联一个 looper,默认的构造方法将关联当前线程的 looper,不过这也是可以 set的。
n 加入Handler 后:一个线程可以有多个 Handler,但是只能有一个 Looper




Hander的两个特点:
n handler可以在任意线程发送消息,这些消息会被添加到关联的 MQ




handler是在它关联的 looper线程中处理消息的



通过如上步骤,就解决了 android最经典的不能在其他非主线程中更新 UI的问题。 android的主线程也是一个 looper线程 (looper android中运用很广 ),我们在其中创建的 handler默认将关联主线程 MQ。因此,利用 handler的一个 solution就是在 activity中创建 handler并将其引用传递给 worker thread worker thread执行完任务后使用 handler发送消息通知 activity更新 UI

                                                                      全过程







0 0
原创粉丝点击