无锡做网站多少钱,网站建设和维护做什么,有人看片吗免费观看,东莞做网站最好的是哪家Handler用于多线程消息分发和处理。与handler相关的几个对象#xff1a;Message, Looper#xff0c;MessageQueue, ThreadLocal.
Handler是Message的消费者。
MessageQueue是容器。
Looper是整个Message分发的驱动。 Handler中有多种发送消息的方法#xff0c;其中postxx…Handler用于多线程消息分发和处理。与handler相关的几个对象Message, LooperMessageQueue, ThreadLocal.
Handler是Message的消费者。
MessageQueue是容器。
Looper是整个Message分发的驱动。 Handler中有多种发送消息的方法其中postxxx的传参为Runablesendxxx的传参为Message.
postxxx本质都调用sendxxx。sendxxx最终会调用MessageQueue的enqueueMessage。 Handler的基本使用方式如下。 Looper会帮助当前的线程创建一个message queue和looper来驱动消息传递。
Looper.loop()则会阻塞进程当收到消息时再触发进程。Looper.loop()后的代码不会被执行。 从代码中可以看出连续两次Looper.prepare会报错。
ThreadLocal是一个Mapkey, value。key为当前线程。所ThreadLocal.get()是以当前线程为key做检查。如果有value则表示loop已创建。 所以一个线程里有一个looper一个looper对应一个messageQueue。
但Handler可以有多个可以传递不同结构的message并处理对应的message。
Message中包含handler本身在将Message放入MessageQueue中时对Message.target进行赋值。 在主进程中之所以不需要执行Looper.prepare和Looper.loop是因为主线程中的ActivityThread已经创建了Looper和Handler。 Message创建方式有两种new Message()和Message.obtain()区别在于后者使用单向链表。
在消息量大的情况下前者仅在GC时集中释放内存会造成内存抖动。