Android世界:Handler机制及其弱引用实现

一、Handler是什么

Android的一种机制,是实现主线程与子线程、子线程与子线程之间消息传递的通讯机制。

包含有:

Handler--负责消息的发送与处理;

Looper-- 死循环的消息队列,实为消息传输的通道;

MessageQueue--消息列表,消息存放的缓冲区,当有多条消息无法及时处理,按照队列进行排队处理;

Message--消息,内含简单内容;
 

大体流程:

handler,looper,messagequeue三者都是与android异步消息处理机制相关的概念。当调用handler.sendMessage()时,会调用queue.enqueueMessage()消息入队。然后出队时Looper消息轮循器会调用looper.loop(),然后MessageQueue.next(),再然后在回调message.dispatherMessage(),最后再调handlerMessage(),完成出队。

第0号 原文:https://blog.csdn.net/LiuRenyou/article/details/72805916

Handler,发送一个Message对象,也可传输runnabler对象,
sendMessage(Message msg) 、post(Runnable r);
待收到消息队列中的消息时,通过handleMessage(Message msg) 进行消息处理或线程执行;
Looper,通过 prepare()将线程thread关联到Looper中,并由myLooper()获得Looper的实例;使用时,用loop() 方法开启一个死循环,将消息不断地进行传输;
MessageQueue,一旦有消息加入到MessageQueue中,即通知Looper进行消息的传输,主要方法:enqueueMessage(Message msg, long when) ;

一句话总结:

一个thread,仅有一个Looper,对应一个MessageQueue,但可以存在多个Handler对象进行线程间通讯。

二、主线程中Handler跟踪

此篇幅较长,偷懒放置链接以供大家参考:

第1号 原文:https://blog.csdn.net/XCF95319605/article/details/81080939


三、Handler的弱引用

为降低OOM发生的可能性,将Handler进行弱引用封装,使其弱引用activity对象,待需要回收内存资源之时,将其进行回收。代码如下:

UIHandler类,通过泛型,将handler进行封装;在使用过程中,构建静态内部类,将Activity对象以弱引用的形式绑定到Handler中 :

Android世界:Handler机制及其弱引用实现_第1张图片

 

 

MainActivity,具体实现类,在使用过程中,需要对弱引用对象进行判空处理:

Android世界:Handler机制及其弱引用实现_第2张图片

你可能感兴趣的:(Android世界:Handler机制及其弱引用实现)