Framework内核解析面试题汇总(十)

25 阅读3分钟

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的区别?(字节跳动)

这道题想考察什么?

  1. 是否了解Handler的运行机制?

考察的知识点

  1. Handler的内部原理

考生应该如何回答

Handler消息机制原理查看**《8.6 Handler怎么进行线程通信,原理是什么?》**。

  1. 首先我们看一下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老皮

目录

img

第一章 Java方面

  • Java基础部分
  • Java集合
  • Java多线程
  • Java虚拟机

img

第二章 Android方面

  • Android四大组件相关
  • Android异步任务和消息机制
  • Android UI绘制相关
  • Android性能调优相关
  • Android中的IPC
  • Android系统SDK相关
  • 第三方框架分析
  • 综合技术
  • 数据结构方面
  • 设计模式
  • 计算机网络方面
  • Kotlin方面

img

第三章 音视频开发高频面试题

  • 为什么巨大的原始视频可以编码成很小的视频呢?这其中的技术是什么呢?
  • 怎么做到直播秒开优化?
  • 直方图在图像处理里面最重要的作用是什么?
  • 数字图像滤波有哪些方法?
  • 图像可以提取的特征有哪些?
  • 衡量图像重建好坏的标准有哪些?怎样计算?

img

第四章 Flutter高频面试题

  • Dart部分
  • Flutter部分

img

第五章 算法高频面试题

  • 如何高效寻找素数
  • 如何运用二分查找算法
  • 如何高效解决雨水问题
  • 如何去除有序数组的重复元素
  • 如何高效进行模幂运算
  • 如何寻找最长回文子串

img

第六章 Andrio Framework方面

  • 系统启动流程面试题解析
  • Binder面试题解析
  • Handler面试题解析
  • AMS面试题解析

img