Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊 👀你想要的面试题这里都有👀 👇👇👇
Handler怎么进行线程通信,原理是什么?(东方头条)
这道题想考察什么?
这道题想考察同学对Handler的多线程通信原理是否清楚。
考生应该如何回答
Handler整体思想
在多线程的应用场景中,将工作线程中需更新UI的操作信息 传递到 UI主线程,从而实现 工作线程对UI的更新处理,最终实现异步消息的处理。
Handler工作流程
Handler机制的工作流程主要包括4个步骤:
- 异步通信准备
- 消息发送
- 消息循环
- 消息处理
Handler工作流程图
如下图所示,handler的总体流程大致如下:
首先,系统通过调用 Looper.prepare()为线程准备Looper 和承接Message 的MessageQueue;
然后,系统再调用Looper.loop()函数,这个函数会开启一个死循环,在循环中不断的轮询MessageQueue消息队列,从消息队列中取出可以执行的Message消息,然后进行执行。
再然后,用户通过Handler.sendMessage这一类的函数调用,向MessageQueue里面不断的发送消息。
最后,由于Looper 中的loop是在不断轮询MessageQueue的,一旦发现MessageQueue里面有可执行的消息,那么就会将消息取出来,然后通过消息所携带的handler去执行。
总结
Handler 是一个消息管理机制,android 程序的运行必须依托于Handler机制,那么handler机制进行线程通信的原理思想如下: 1) 在启动handler通信机制的时候,首先会准备Looper,以及必须让Looper调用loop函数进入死循环;2)在Looper启动后,loop死循环就会不断的去轮询MessageQueue的next函数,试图通过这个方式获取到MessageQueue中存储的Message;3)当用户希望往当前创建handler的这个线程里面传递消息的时候,就可以调用这个handler的sendMessage或者postMessage 相关的函数,次数Message将被发送到对应的MessageQueue中;4)在第2)步中,loop里面的循环就会轮询到我们在第3)步中添加的消息,当这个消息被loop轮询到的时候,这个消息就会被处理掉,而且处理的线程就是当前轮询MessageQueue的线程。
总的来说,Handler机制可以理解为 在一个线程中创建了一个Message 对象(内存块),这个Message对象包含了我们要执行的动作;然后我们通过handler将这个Message内存块传给了MessageQueue,也就是说MessageQueue是存储的Message;然后Looper所在的线程通过loop()函数从MessageQueue中取到我们存储的Message,并在当前这个线程中去执行的过程。
更多的2023年Android中高级最全面试真题答案
请 Vx关注公众号:Android老皮
目录
第一章 Java方面
- Java基础部分
- Java集合
- Java多线程
- Java虚拟机
第二章 Android方面
- Android四大组件相关
- Android异步任务和消息机制
- Android UI绘制相关
- Android性能调优相关
- Android中的IPC
- Android系统SDK相关
- 第三方框架分析
- 综合技术
- 数据结构方面
- 设计模式
- 计算机网络方面
- Kotlin方面
第三章 音视频开发高频面试题
- 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
- 怎么做到直播秒开优化?
- 直方图在图像处理里面最重要的作用是什么?
- 数字图像滤波有哪些方法?
- 图像可以提取的特征有哪些?
- 衡量图像重建好坏的标准有哪些?怎样计算?
第四章 Flutter高频面试题
- Dart部分
- Flutter部分
第五章 算法高频面试题
- 如何高效寻找素数
- 如何运用二分查找算法
- 如何高效解决雨水问题
- 如何去除有序数组的重复元素
- 如何高效进行模幂运算
- 如何寻找最长回文子串
第六章 Andrio Framework方面
- 系统启动流程面试题解析
- Binder面试题解析
- Handler面试题解析
- AMS面试题解析