消息处理机制Looper,Handler,Message

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),整个过程是异步的

消息处理机制Looper,Handler,Message_第1张图片

一个线程可以有多个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)