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

news/2024/12/21 16:00:27/

在这里插入图片描述

经典回答

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

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

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

实际开发中注意的地方。比如会问在一个工作线程中创建自己的消息队例应该怎么做?

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

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

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

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

    private final Handler handler = new Handler() {@Overridepublic 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引起的内存泄露》

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


http://www.ppmy.cn/news/5287.html

相关文章

详解事务:Mysql事务、Spring事务、分布式事务

详解事务:Mysql事务、Spring事务、分布式事务(一)Mysql事务【1】4种隔离级别【2】测试案例(二)Spring事务【1】准备测试代码(1)添加依赖(2)配置文件(3&#x…

【计算机视觉】回顾2022年计算机视觉领域最激动人心的进展

目录:回顾2022年计算机视觉一、前言二、计算机视觉趋势2.1 Transformer统治计算机视觉2.2 以数据为中心的计算机视觉获得牵引力2.3 AI 生成的艺术作品2.4 多模态人工智能成熟三、计算机视觉的新应用3.1 运动领域3.2 环境保护3.3 自动驾驶3.4 健康与医药四、总结一、…

React Navigation 使用中遇到的问题小结

在React Native的开发中,使用到react navigation框架时遇到了不少问题。主要是安卓和iOS中相对不协调的地方,特此记录 一、Navigation Bar 使用navigationbar的时候遇到如下的问题 1.navigation bar的底部有一条黑线 本意做一个bar的颜色和页面颜色一…

OLAP系统林林总总

大数据需求通常可分为三大类:离线数据统计,实时数据计算,即席查询。 离线数据统计,通常是T1出数,是最典型的数据仓库解决的问题。计算复杂性最高,所以是时间就不能要求太高,否则对资源的要求将…

计算机组成原理——期末复习题

某计算机指令集中共有A、B、C、D四类指令,它们占指令系统的比例分别为40% 、20%、20%、 20%, 各类指令的CPI分别为 2、3、4、5;该机器的主频为600MHZ,则该机的MIPS为_187.5 ____。(保留到小数点后一位) 若某程序编译…

【AJAX】入门AJAX

入门AJAXAJAX概述AJAX的使用XMLHttpRequest创建XMLHttpRequest对象XMLHttpRequest对象的常用方法XMLHttpRequest对象的常用属性使用AJAX POST请求实现‘判断用户名’案例实现步骤模拟数据库表单前端代码后端程序效果展示AJAX概述 什么是AJAX? AJAX全称(…

JVM面试题详解系列——垃圾收集算法详解

垃圾收集算法 标记 - 清除算法 首先标记出所有需要被回收的对象,标记完后统一回收所有被标记的对象。 后续的收集算法都是基于这种思路并对其不足进行改进而得到的。 这种方法主要有两个缺点: 一个是效率问题,标记和清除两个过程的效率都…

【C语言进阶】学会使用qsort函数

写在前面 qsort函数是C语言的库函数&#xff0c;能实现对各种元素类型的比较&#xff0c;使用的基本思想是快速排序法&#xff0c;头文件是<stdlib.h>,本文不讲解具体实现原理&#xff0c;只对使用方法进行说明。 正文 铺垫知识 qsort函数参数类型 void qsort (void* …