消息处理机制Looper,Handler,Message

作者: __HAPPINESS_yh | 来源:发表于2017-06-27 14:34 被阅读50次

Looper

Looper 线程

public class LooperThread extends Thread {
    @override
    public void run(){
        Looper.prepare();
        Lopper.loop();
    }
}

Looper.prepare()

每个线程中的Looperduixiang 其实是一个ThreadLocal,一个Thread只能有一个Looper对象,再次创建Looper将抛出异常

Looper.loop()

调用loop方法后,Looper线程不断从自己的MQ中取队头的消息执行

Handler

往MQ上添加消息和处理消息,及通知MQ它要执行一个任务(sendMessage),并在loop到自己的时候执行该任务(handleMessage),整个过程是异步的

一个线程可以有多个Handler,但是只能有一个Looper

Handler发送消息

post(Runnable), postAtTime(Runnable, long), postDelayed(Runnable, long), sendEmptyMessage(int), sendMessage(Message), sendMessageAtTime(Message, long)和 sendMessageDelayed(Message, long)这些方法向MQ上发送消息了。光看这些API你可能会觉得handler能发两种消息,一种是Runnable对象,一种是message对象,这是直观的理解,但其实post发出的Runnable对象最后都被封装成message对象了

Handler处理消息

消息的处理是通过核心方法dispatchMessage(Message msg)与钩子方法handleMessage(Message msg)完成的

相关文章

网友评论

    本文标题:消息处理机制Looper,Handler,Message

    本文链接:https://www.haomeiwen.com/subject/kglecxtx.html