【面试专题】2021年大厂 Handler 面试题集合

本文汇总了2021年字节、阿里、网易等大厂面试中关于Handler的相关问题,涵盖Handler基础、Message获取方式、Looper工作原理、线程与Looper关系、延迟消息发送、子线程Handler初始化、内存泄漏、消息监控、同步屏障、异步消息应用、IdleHandler等知识点,适合高级Android开发者复习面试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如果你是面试高级Android开发,Handler绝对是必问问题,没有之一。本文结合了2021年4-5月份字节、阿里、网易等公司的面试经历,整理了面试过程中被问及的Handler相关的知识点。会涉及到很多细节知识,大家可以作为面试参考了解一下。

Handler基础

你可以说一下Handler吗?
约一半的公司会以这个问题开头,问的比较宽泛,建议整理一下Handler的整体流程,按顺序来讲:

  • 可以先说一说 Handler -- Looper -- Message -- MessageQueue的关系,这边会涉及到线程中Looper唯一 --> MessageQueue唯一,以及如何通过 ThreadLocal 来保证唯一性的。
  • 然后可以说一说Handler的整体工作流程,建议按照以下顺序说会比较有条理:
    handler.sendMessage 发送消息到消息队列MessageQueue
    looper调用自己的loop()函数带动 MessageQueue,messageQueue的enqueueMessage()消息入队,next()方法通过for死循环轮询messageQueue里面的每个Message。(这边如果你多线程、锁都比较了解的话可以说一下enqueueMessage、next、quit方法中如何通过synchronized关键字来控制线程安全的。)
    拿到消息后通过dispatchMessage()处理消息,处理优先级:message自带的callback > handler的callback > 默认handleMessage(msg)实现。
  • 说一下异步消息、同步屏障的机制。(这边一般说完之后会问你同步屏障的一些应用场景、如何发一个异步消息等等,这些问题后边会细讲。)
  • 最后可以说一下 IdleHandler。(一般说完这个必会问你IdleHandler的实际使用场景)

获取Message实例的方式?为什么要用obtain的方式获取?

字节问了这个题。

直接创建,Message msg = new Message。
通过Message.obtain()或者Handler.obtatinMessage()来得到一个Message对象。这边说一下Message的复用池机制,message通过静态单链表(private static Message sPool)来全局完成消息的复用,recycle的时候清空message中的数据,防止message持有其他对象而造成内存泄漏操作。MAX_POOL_SIZE = 50,链表最大容量也可以了解下,防止被问到细节。

Looper死循环为什么不会导致应用卡死?

Handler是native层的阻塞、唤醒(

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值