Android⾯试题(2)
5副对联爱读书手抄报10. Handle消息机制(⾮常重要),LocalBroadcastManager?
1. 什么是Handler?
Handler机制是Android中基于单线消息队列模式的⼀套线程消息机制。本质是消息机制,负责消息的分发以及处理。
qq刷等级
2. Handle原理交流调压电路
红楼梦贾元春Android 中主线程是不能进⾏耗时操作的,⼦线程是不能进⾏更新 UI 的。所以就有了 handler, 它的作⽤就是实现线程之间的通信。
Handler 整个流程中,主要有四个对象,handler,Message,MessageQueue,Looper。当应⽤创建的时候,就会在主线程中创建handler 对象, 我们通过要传送的消息保存到 Message 中,handler 通过调⽤ ndMessage() 将 Message 发送到 MessageQueue 中,Looper 对象就会不断的调⽤ loop() 不断的从 MessageQueue 中取出 Message 交给 handler 进⾏处理。从⽽实现线程之间的通信。
注意:
每个线程只能拥有1个Looper但是可以有多个handler,1个Looper可绑定多个线程的handler,⼀个handler只能绑定⼀个looper。网络营销应该这样做
听力材料补充:陈楚生原创歌曲
ThreadLocal 提供了 get/t ⽅法分别⽤来获取和保存变量。⽐如在主线程通过 prepare() ⽅法来创建 Looper 对象,并使⽤
sThreadLoacal.t(new Looper(quitAllowed)) 来保存主线程的 Looper 对象,那么在主线程调⽤ myLooper()(实际调⽤了
<() ⽅法) 就是通过 ThreadLocal 来获取主线程的 Looper 对象。如果在⼦线程调⽤这些⽅法就是通过对
ThreadLocal 保存和获取属于⼦线程的 Looper 对象。
内存泄漏:
我们会发现Entry中,ThreadLocal是⼀个弱引⽤,⽽value则是强引⽤。如果外部没有对ThreadLocal的任何引⽤,那么ThreadLocal就会被回收,此时其对应的value也就变得没有意义了,但是却⽆法被
回收,这就造成了内存泄露。怎么解决?在ThreadLocal回收的时候记得调⽤其remove⽅法把entry移除,防⽌内存泄露。
Message
Message的作⽤就是承载消息,他的内部有很多的属性⽤于给⽤户赋值。同时Message本⾝也是⼀个链表结构,⽆论是在
MessageQueue还是在Message内部的回收机制,都是使⽤这个结构来形成链表。同时官⽅建议不要直接初始化Message,⽽是通过Message.obtain()⽅法来获取⼀个Message循环利⽤。⼀般来说我们不需要去调⽤recycle进⾏回收,在Looper中会⾃动把Message进⾏回收
MessageQueue
每个线程都有且只有⼀个MessageQueue,他是⼀个⽤于承载消息的队列,内部使⽤链表作为数据结构,所以待处理的消息都会在这⾥排队。
主要包含两个操作:插⼊和读取(其中,读取操作本⾝伴随删除操作),对应的⽅法分别为 enqueueMessage() 和