Android -- 每日一问:能讲讲 Android 的 Handler 机制吗?

news2024/11/24 8:45:08

09.jpg

典型回答

讲清楚Android中的消息机制,先表述一下和Handler相关的一些类:

Message:消息分为硬件产生的消息(如按钮、触摸)和软件生成的消息;
MessageQueue:消息队列的主要功能向消息池投递消息(MessageQueue.enqueueMessage)和取走消息池的消息(MessageQueue.next);
Handler:消息辅助类,主要功能向消息池发送各种消息事件(Handler.sendMessage)和处理相应消息事件(Handler.handleMessage);
Looper:不断循环执行(Looper.loop),按分发机制将消息分发给目标处理者。

Handler相关类的代码量并不大,建议大家都去看一下,网上也有很多介绍和分析这些源码的文章,大家自己Google一下。大家把代码过了一遍后,会更加深对整个过程的理解,讲起来就从容多了。不建议大家为了面试去背书。

面试时,如果一个人可以清楚的表达Handler的运行机制,那么我们接下来会主要问一下一些实际开发中注意的地方。比如会问在一个工作线程中创建自己的消息队例应该怎么做?

其实就是想从侧面验证他是否正的了解,是否知道要调用Looper.prepare(在每个线程只允许执行一次)。

或者再问问是否用过HandlerThread,它有什么优缺点等。

注意:Handler可能会引起的内存泄露

在Activity中像这样创建一个Handler再正常不过了。

    private final Handler handler = new Handler() {
        @Override
        public void handleMessage(Message msg) {

        }
    };

但是,其实上面的代码可能导致内存泄露,当你使用Android lint工具的话,会得到这样的警告:

In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread’s MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class

有兴趣的可以细看一下这篇译文:

  • 《Android中Handler引起的内存泄露》
  • 《Android 消息处理机制(Looper、Handler、MessageQueue,Message)》

你的朋友是不是也在准备面试呢?你可以“请朋友读”,把今天的题目分享给好友,或许你能帮到他。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/53573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

疫情下为什么年轻、未婚女性更容易拿到offer

最近发现一个奇怪的现象,为什么会奇怪。大家别着急,容我慢慢道来。由于疫情开始后,也是大家开始躺平后,企业在有意、无意的疯狂裁员,导致人心惶惶,大家都不敢轻易跳槽了。甚至有的人很庆幸,有份…

一文弄懂JUnit5相关注解

JUnit5 JUnit是Java生态系统中最流行的单元测试框架之一。JUnit5版本包含许多令人兴奋的创新,其目标是支持Java8和更高版本中的新功能,并支持多种不同风格的测试。 Maven依赖 启动JUnit5.x.0非常简单;我们只需要将以下依赖项添加到pom.xml…

昆石网络 VOS3000虚拟运营支撑系统任意文件读取漏洞

漏洞描述: 昆石网络 VOS3000虚拟运营支撑系统 通过 %c0%ae%c0%ae 等字符绕过检测,可导致任意文件读取漏洞。 漏洞利用条件: 对⽤户查看或下载的⽂件没有限制或者限制绕过,就可以查看或下载任意⽂件 漏洞影响范围: VOS3000 漏…

阿里云Redis性能压力测试(二十)

文章目录1.云Redis性能压力测试2.安装redis-banchmark压测工具3.压测两节点的Redis集群4.压测四节点的Redis集群4.1.扩容集群为四节点4.2.压力测试5.压测结果对比1.云Redis性能压力测试 我们当前Redis集群是2个节点2个分片,使用redis-benchmark工具对Redis集群进行…

轨迹预测——day 57 基于车道交叉和考虑驾驶方式的终点生成模型的前目标车辆轨迹预测

Trajectory Prediction of Preceding Target Vehicles Based on Lane Crossing and Final Points Generation Model Considering Driving Styles导读II.问题表述与系统架构A. Trajectory Prediction for PTVs(preceding target vehicles)B. Position and…

python自学程序练习01:99乘法表

#完成99乘法表 #1*11 #1*22 2*24 #1*33 2*36 3*39 #很明显要两个循环print(打印99乘法表:) for i in range(1,10):for j in range(1, i1):print(f{j}*{i}{j * i}, end )结果如上图所示,很明显发现,是我们想要的数据但是他的形式需要有所修改。…

Vue3创建项目(四)main.js配置,避坑指南

系列文章目录 第一篇 Vue3创建项目(一)新手教程 第二篇 Vue3创建项目(二)router路由配置和使用 第三篇 Vue3创建项目(三)Vuex配置 目录 系列文章目录 main.js配置,直接看图,如下…

作为前端你还不懂MutationObserver?那Out了

🐱个人主页:不叫猫先生 🙋‍♂️作者简介:前端领域新星创作者、华为云享专家、阿里云专家博主,专注于前端各领域技术,共同学习共同进步,一起加油呀! 💫系列专栏&#xff…

Netty(一)- Netty与BIO、NIO、AIO介绍

文章目录一、Netty的介绍二、Netty的应用场景1. 互联网行业2. 游戏行业3. 大数据领域三、I/O模型1. Java BIO(1)Java BIO 基本介绍(2)Java BIO 工作机制(3)Java BIO 应用实例(4)Java…

css如何快速将网站设置为灰色背景

突然想起写这篇文章是因为,公司的产品大早上打电话说:“赶紧,业务刚通知,我们的官网、小程序、公众号的首页需要变为灰色背景,最好在10点半之前上线”。当时心有千般不愿,但最后生活压倒我坚硬的脊梁。哈哈…

关于《web课程设计》网页设计 用html css做一个漂亮的网站 仿新浪微博个人主页

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

C语言用高斯消元法求行列式

目录 数学原理 程序设计 整体流程与代码 测试函数 测试结果 数学原理 高斯消元法求行列式:利用初等行变换,化为上三角行列式,求其主对角线的乘积 行列式的初等行变换: 1)换行变换:交换两行&#xf…

静态路由配置案例

静态路由配置案例配置静态路由原理命令:案例:最后结果:配置静态路由原理命令: [Huawei]ip route-static 来源ip 子网掩码 去向ip [Huawei]ip route-static 192.168.20.1 255.255.255.0 192.168.1.2 案例: pc1,pc2,a…

世界杯里的数学知识

一、前言 2022 年卡塔尔世界杯足球赛已经开幕,这是历史上首次在卡塔尔和中东国家境内举行、也是第二次在亚洲举行的世界杯足球赛。除此之外,卡塔尔世界杯还是首次在北半球冬季举行、首次由从未进过世界杯决赛圈的国家举办的世界杯足球赛。世界杯足球赛里…

凌玮科技IPO注册生效:曾踩雷理财损失2000万元,胡颖妮为董事长

11月30日,广州凌玮科技股份有限公司(下称“凌玮科技”)在深圳证券交易所创业板递交招股书(注册稿)。相较于此前招股书,凌玮科技补充披露了截至2022年9月30日的财务数据等信息,并对2022年度的业绩…

SimCSE:对比学习,只需要Dropout

要说2021年上半年NLP最火的论文,想必非《SimCSE: Simple Contrastive Learning of Sentence Embeddings》莫属。SimCSE的全称是Simple Contrastive Sentence Embedding Sentence Embedding Sentence Embedding一直是NLP领域的一个热门问题,主要是因为其…

独家 | AI是如何帮助创造看起来和听起来都和我们一样的仿真数码人的

作者:Anthony Green翻译:顾伟嵩 校对:赵茹萱本文约6000字,建议阅读14分钟 由AI驱动的仿真数码人正在从事娱乐、执法等工作。图来源于ERICA SNYDER/MITTR | UNSPLASH仿真数码双胞胎捕获了真实人类的外表和表情。这些复制品越来越多…

科技云报道:从百度智能云的探索,看懂边缘云的过去和未来

科技云报道原创。 布莱恩阿瑟在《技术的本质》一书中写道,“技术是一个异常美丽的主题,它不动声色地创造了财富,成就了经济的繁荣,改变了人类的生存方式。” 五年前,人们还不会在地铁公交上看视频,因为视频…

obsidian和zotero联动

前言 看了好多obsidian和zotero联动的视频和教程,终于还是下手了。 obsidian和zotero之所有能够完美联动,很大程度上建立在这两个软件都有这活跃的第三方插件市场,只要肯花功夫挖掘,我相信是能玩出花来的。 网上的多数联动是基…

如何在R语言中建立六边形矩阵热图heatmap可视化

原文链接:http://tecdat.cn/?p18879这是一个六边形热图可视化程序,主要用到的知识RColorBrewer,fields,也就是R中的可视化绘图库(点击文末“阅读原文”获取完整代码数据)。本文希望SOM的结果以六边形热图可视化。让我…