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机制及其弱使用实现

 

 

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

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

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值