从头再看Handler
Handler是什么
- 想必每一个做安卓开发的人都知道Handler,就是线程间通信的桥梁,那么他的本质是什么呢,说白了就是内存共享。
Handler的是如何实现内存共享的
- 这就要说到
Message消息,说到消息就需要说到MessageQueue消息队列,那么有了消息和消息队列,肯定少不了Looper消息泵,最后如何运行起来呢,就用到了Looper.loop()消息泵的开关,好了到这里Handler基本就明了了。
从源码理解Handler
- 我们用
Handler发送消息都是通过sendMessage()或者post()方法,最后调用的都是enqueueMessage方法。
Handler内存共享如何保证数据的安全
- 这里就要说到一个新的角色
ThreadLocal,ThreadLocal中有一个静态内部类ThreadLocalMap,他为每个线程都维护一个table数组,其中通过int i = firstKey.threadLocalHashCode & (INITIAL_CAPACITY - 1);和int i = key.threadLocalHashCode & (len-1);产生一个ThreadId作为key,value就是我们发出的消息。
如果对ThreadLocal感兴趣可以看看这篇文章
ThreadLocal
Handler如何存取消息
MessageQueue.enqueueMessage()向消息队列添加消息,MessageQueue.next()从消息队列里取消息。
- 由此可以看出使用了生产者消费者模式,并且还有延迟消息的添加, 就像链表一样在给消息进行重排序。
今天就先写到这明天继续😂未完待续下期见!