Android面试题精选——l聊一聊Android Handler机制

本文详细探讨了Android中Handler、Looper和MessageQueue的关系及其工作原理。Handler负责消息发送和处理,Looper管理MessageQueue并不断从队列中取出消息,MessageQueue用于存放消息。通过分析源码,展示了Handler如何创建、发送消息,以及Looper如何通过循环从队列中取出消息并交给Handler处理。文章还介绍了消息的三种处理方式:Message的callback、Handler的mCallback和handleMessage(msg)方法。
摘要由CSDN通过智能技术生成

前言

每次面试,handler基本上被问到的概率超过百分之八九十。同学们有咩有想过为什么面试官特别喜欢问handler?

这是因为handler能延伸出很多的面试点。不信的话,我们来看:

请说说Handler、Looper、MessageQueue

Handler机制在Android中是一个非常重要的知识点,在我们的平常开发中也是经常使用到的。在Android的面试中Handler机制更是必考的题目,而且题目也很单一:请说说Handler、Looper、MessageQueue之间的关系。这个问题无论是我去面试还是我面试别人,都会问到的一个问题。如果你遇到了这个问题,你只是简单的说一下它们是什么什么关系,那是远远不够的。这道题考察的无非就是你对Handler机制的实现和它的工作原理的了解。下面我们就通过Handler机制的工作流程图和源码来详细分析Handler实现细节和工作原理。

下面想看Handler的工作流程图:(第一次画图,有点丑,凑合着看吧)

因为Handler的主要作用就是线程切换,所以在图中我把Handler线程变化也画了出来。从这张图我们能看出几点信息:

1、Handler负责消息的发送和处理:Handler发送消息给MessageQueue和接收Looper返回的消息并且处理消息。
2、Looper负责管理MessageQueue:Looper会不断地从MessageQueue取出消息,交给Handler处理。
3、MessageQueue是消息队列(实时上它是用链表实现的),负责存放Handler发送过来消息。
4、一个Looper对应一个线程(自己所在的线程,如:线程B)。Looper的loop()方法运行在自己所在的线程(线程B)中,当Handler在线程A发送一条消息存放到MessageQueue时,Looper的loop()方法在线程B把消息取出来,并交给Handler处理,所以Handler的处理消息的方法是运行在Looper所在的线程(线程B)的。由于多个线程之间共享内存空间,所以Handler可以在线程A把消息存放到MessageQueu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值