问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Android面试 Handler机制

发布网友 发布时间:2022-11-26 19:52

我来回答

1个回答

热心网友 时间:2023-01-25 08:27

Handler就是解决线程与线程间的通信。
当我们在子线程处理耗时操作,耗时操作完成后我们需要更新UI的时候,这就是需要使用Handler来处理了,因为子线程不能更 新UI,Handler能让我们容易的把任务切换回来它所在的线程。
消息处理机制本质:一个线程开启循环模式持续监听并依次处理其他线程给它发的消息。

一个线程可以有多个Handler,通过new Handler的方式创建。

一个线程只能有一个Looper,通过Looper.perpare方法会创建一个Looper保存在ThreadLocal中,每个线程都有一个LocalThreadMap,会将Looper保存在对应线程中的LocalThreadMap,key为ThreadLocal,value为Looper。

内部类持有外部类的对象,handler持有activity的对象,当页面activity关闭时,handler还在发送消息,handler持有activity的对象,导致handler不能及时被回收,所以造成内存泄漏。

因为当handler发送消息时,会有耗时操作,并且会利用线程中的looper和messageQueue进行消息发送,looper和messageQueue的生命周期是很长的,和application一样,所以handler不容易被销毁,所以造成内存泄漏。

解决方案有:

可以在子线程中创建Handler,我们需要调用Looper.perpare和Looper.loop方法。或者通过获取主线程的looper来创建Handler。

应该调用Looper的quit方法,因为可以将looper中的messageQueue里的message都移除掉,并且将内存释放。

通过synchronized锁机制保证线程安全。

Message.obtain来创建Message。这样会复用之前的Message的内存,不会频繁的创建对象,导致内存抖动。

点击按钮的时候会发送消息到Handler,但是为了保证优先执行,会加一个标记异步,同时会发送一个target为null的消息,这样在使用消息队列的next获取消息的时候,如果发现消息的target为null,那么会遍历消息队列将有异步标记的消息获取出来优先执行,执行完之后会将target为null的消息移除。(同步屏障)

更多内容戳这里(整理好的各种文集)

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航用电脑软件哪个好导航软件哪个最准确 我要地图网使用我要地图网轻松查询地图信息 装配行业MES系统四大车间管理活动介绍 王者荣耀S14狂铁怎么玩_王者荣耀S14狂铁出装铭文推荐 沅陵县有姓文的分布在那个地方, 汨罗一中在省排名 汨罗高中有哪些? 湖南省岳阳市汨罗有哪些高中 新生儿脊膜膨出后遗症 在深圳硬脊膜膨出手术后大小便失禁怎么办? 纪梵希水乳合一有用过的吗?效果怎么样?用它还用水和乳吗? 内蒙古公务员面试技巧 买的二手萤石云台摄像机,已被别人添加绑定过了,如何解绑,设备己被别人*如何解除找不到原来主人? 胳膊,腿说疼就疼详细原因是什么? 请问小腿和胳膊痛什么原因 飞利浦32pff5101 t3 32英寸硬屏1080p智能平板液晶电视机怎么样 飞利浦32英寸智能液晶电视机32PFL5040T3 内置WIFI网络怎么样 男子因工作问题憋尿一天后昏倒,憋尿会带来什么危险? 医生飞机上用嘴帮老人吸尿感动全网,但是此举会有染病的风险吗? 尿毒症今天刚拔的引尿袋排不出尿,过了3小时喝了1500毫升的水,12小时内排不出尿会有生命危险吗? 日记2008年12月23日星期二 10月4日日记星期二雨天怎么写 抖音刷关注页是什么意思 小米9省流量模式在哪里关闭? daretoleap是什么手机 温控器制冷用英语怎么说 王者荣耀亲密关系解除了还能重建吗 王者荣耀亲密关系解除了还能重建 求大神解答 刚换硬盘重装了系统 但是引导盘还在老硬盘上 去美国留学需要具备什么条件吗 ....的开始,用英语怎么说呀 Android-DialogFragment内存泄露最强解决方案 UVC Camera使用简单记录 内存泄露作业 工作手麻了怎么办 医生我干活后两只手麻是怎么回事 非全日制研究生可以和全日制研究生一起报考吗? 干活的时候手麻的疼,怎么回事 想去做韩式半永久,想问问眉毛稀疏可以做根状眉吗 丷怎么读 丷如何读 丷读作什么 sqlserver一些简单问题 生日红包是工资的多少 新工作第一次发工资,想跟领导发个红包,发几元钱可以吗? 炒紫甘蓝要先用水焯吗 炒紫甘蓝要不要先用水焯 18周胎儿双顶径标准 孕18周双顶径多少正常值是多少 怀孕18周胎儿双顶径标准值多少正常 滑板更像是一场长达10年的梦 滑板车放到彩虹上比喻成什么 吉利星越怎么样值得买吗