此模型分析:
1、以Handler的sendMessage方法为列,当发送一个消息后,会将此消息加入消息队列MessageQueue中
2、Looper负责去遍历消息队列并且将队列中的消息分发给对应的Handler进行处理。
3、在Handler的HandleMessage方法中处理该消息,这就完成了一个消息的发送和处理过程。
在图中可以看弹道参与消息处理有四个对象,他们分别是Handler,Message,MessagQueue,Looper。
ThreadLocal工作原理
定义:ThreadLocal是一个线程内部的数据存储类, 通过它可以在指定的线程中存储数据,数据存储以后,只有在指定线程中可以获取到存储的数据,对于其他线程来说则无法获取到数据。
启动App创建唯一得Looper对象和全局唯一的MessageQueue消息对象
Activity中创建Handler
消息发送
分析消息阻塞(阻塞时间)、唤醒、延时
Looper的阻塞主要是靠MessageQueue来实现的,在MessageQueue的next()进行阻塞,在MessageQueue的enqueueMessage()进行唤醒。主要依赖native层的Looper依靠epoll机制进行的。
nativePollonce(ptr , nextPollTimeoutMillis); 这里调用native方法操作管道,由nextPollTimeoutMillis决定是否需要阻塞nextPollTimeoutMillis为0的时候表示不阻塞,为-1的时候表示一直阻塞直到被唤醒