Android如何处理消息?
Android是基于消息驱动的系统,消息处理机制自然重中之重 ,一句话大体说一下:每个线程用过ThreadLocal保证存储的Looper线程唯一性,Looper.Preapre
中会创建一个该线程的MessageQueue
(一个存储Message
的消息单链表),而将消息插入到MessageQueue
的执行者就是Handler
,所以一个线程中一个Looper,一个MessageQueue,大量Message,多个Handler,下图很好的解释了取数据以及分发数据的流程:
Message如何创建?
既然Android是基于消息机制,那么Android不断的创建Meaage到MessageQueue中,堆中是不是会不断的新对象的创建以及销毁,导致内存抖动,而Gc线程虽然作为优先级最低的线程,此时因为必须gc,导致gc线程抢占cpu时间片,主线程拿不到cpu而卡顿调帧。Google在设计消息机制的时候就想到了消息复用机制,几乎所有framework中发送消息都是通过Message.obtain
来进行消息复用,接下俩看一下如何复用:
- 在主线程Looper的loop()中不断的从消息队列中取消息diapatch,分发之后