Handler消息机制

一、Looper

涉及到的方法:prepare()、loop()

prepare():静态方法,内部执行Looper构造方法,创建Looper实例,保证一个线程只有一个Looper实例存在

Looper构造方法:构造方法内部创建了一个MessageQueue(消息队列)对象

执行完prepare之后,就可以拿到Looper对象实例了,Looper构造方法中又去创建了一个MessageQueue(消息队列),保证了一个线程只有一个Looper对象和一个MessageQueue(消息队列)

loop():无线循环,不停的从MessageQueue(消息队列)中取消息,拿到消息之后交给Handler去Dispatcher(分发),如果消息队列中没有消息,则处于阻塞状态

二、Handler

构造方法:内部调用Looper.myLooper(),获取到Looper对象,因为创建Looper对象的时候在构造方法中又去创建了MessageQueue(消息队列),所以Handler就与Looper和MessageQueue关联起来了

sendMessage(Message msg):内部会调用sendMessageDelayed(Message msg,long delayMillids),最后调用MessageQueue的enqueueMessage(msg, uptimeMillis),将消息保存到消息队列中,MessageQueue读取到Message之后会回调dispatchMessage(Message msg),dispatchMessage中又会回调handlerMessage(Message msg)

Message.obtain():内部维护了一个Message池,对Message对象进行复用


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容