Android并发编程高级面试题汇总最全最细面试题讲解持续更新中👊👊 👀你想要的面试题这里都有👀 👇👇👇
Handler的Callback存在,但返回true,handleMessage是否会执行?(字节跳动、小米)
这道题想考察什么?
这道题想考察同学对Handler的Callback 的理解。
考生应该如何回答
首先,如果Handler的Callback存在,若Callback返回true,handleMessage则不会执行;若Callback返回false,则handleMessage仍然会执行。Handler对于消息的处理都会在Handler#dispatchMessage
中完成分发,具体细节分析如下代码所示:
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
// 1. 设置了Message.Callback(Runnable)
handleCallback(msg);
} else {
if (mCallback != null) {
// 2. 设置了 Handler.Callback(Callback )
if (mCallback.handleMessage(msg)) {
return;
}
}
// 3. 未设置 Handler.Callback 或 返回 false
handleMessage(msg);
}
}
public interface Callback {
public boolean handleMessage(Message msg);
}
我们一起来看一下 Callback的源码,Handler.Callback的定义如下:
public interface Callback {
/**
* @param msg A {@link android.os.Message Message} object
* @return True if no further handling is desired
*/
boolean handleMessage(@NonNull Message msg);
}
Handler.Callback#handleMessage
在处理Message后需要返回boolean类型的结果,而此返回值如果为true,那么在Handler#dispatchMessage
中会直接return:
if (mCallback.handleMessage(msg)) {
return;
}
因此Handler#handleMessage
则不会执行。
Handler的sendMessage和postDelay的区别?(字节跳动)
这道题想考察什么?
- 是否了解Handler的运行机制?
考察的知识点
- Handler的内部原理
考生应该如何回答
Handler消息机制原理查看**《8.6 Handler怎么进行线程通信,原理是什么?》**。
- 首先我们看一下Handler的相关源码
public final boolean sendMessage(@NonNull Message msg) {
return sendMessageDelayed(msg, 0);
}
public final boolean postDelayed(@NonNull Runnable r, long delayMillis) {
return sendMessageDelayed(getPostMessage(r), delayMillis);
}
private static Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback = r;
return m;
}
总的来说,从上面代码我们可以看出,postDelayed和sendMessage方法都是使用到了sendMessageDelayed函数,本质上没多大差别。postDelayed使用到了getPostMessage函数,将Runnable转化为Message,然后相较sendMessage多了一个延时操作。
详细 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面试题解析