当前位置: 首页 > news >正文

Android 车载系统软件开发?助你面试一把过!

Q1. 自定义 View 的流程

通常是父布局通过递归先测量所有子视图的大小,再计算位置,然后从上到下依次绘制。
GPU会将这些绘制指令渲染到图形缓冲区,再传递 (BufferQueue) 给 SurfaceFlinger 进行合成, 最后交给显示硬件(HAL层)刷新屏幕。

Q2. View的事件传递机制

事件的起点通常是 Activity 的 DecorView(根布局), 从这里依次向下分发,如果没有被视图组 (ViewGroup) 拦截的话,事件会一直走到 View, 如果 View 都没有消耗这个事件, 就会向上“回溯”, 最终回到 Activity 处理。

核心方法论: 事件分发依赖于三个核心方法:

  • dispatchTouchEvent():分发。
    1. 返回 true 当前视图是责任人,事件将不再向上回溯
    2. 返回 false 事件回溯给父级,不触发自己的 onTouchEvent
    3. 当调用 super 方法时,如果是 ViewGroup 就会调用子视图的 dispatchTouchEvent 询问它是否消耗了事件
  • onInterceptTouchEvent():拦截(仅属于 ViewGroup)。
  • onTouchEvent():消费。
  • 滑动冲突可使用 parent.requestDisallowInterceptTouchEvent 通知父容器不再拦截事件。

事件没有被消耗,最终回到 Activity onTouchEvent:


事件被 view3 处理,不再回溯:

Q3. ANR 出现的原因

对于 APP 来说 ANR 出现的原因无非就是三大类:

  1. 主线程压力过大,正在高负荷处理各种任务。比如:CPU计算、GPU高频渲染等
  2. 内存占用过高,APP的运行内存不够。比如:内存泄露、加载大图等
  3. 主线程在等待别的任务。比如:死锁、同步 Binder 调用

如何通过日志分析?

首先搜索包名锁定 main 线程,若状态为 Blocked 则通过 held by 寻找持锁线程,若为 Runnable
则分析堆栈定位耗时的业务代码;其次关注 Native 状态下的 Binder 调用,确认是否因对端进程无响应导致跨进程通信卡死;最后通过日志顶部的 CPU usage 确认 io wait 占比,从而快速判定是代码逻辑过载、后台抢锁冲突还是磁盘 IO 瓶颈。

PS: 跨进程通信(IPC)卡死通常由 Binder 同步调用 机制引发,例如:跨进程死锁、对端进程(服务端)忙碌或阻塞、系统服务(SystemServer)全局锁竞争

Q4.CAN 协议应用层处理建议

协议层的实现通常是由系统完成的,应用端通过反射去拿实例,通过这个实例,传入 handle 接收信号,通过系统提供给我们的 write 去写入指令, 写入后系统通过 handle 下发值,之后根据 handle传过来的值进行解析与封装,解析这一块的逻辑比较长,有很多二进制和十进制的判断,解析后调用相关的接口分发,封装是通过观察者模式,使用并发的 Map 集合(ConcurrentHashMap)存取 指令和接口的集合,暴露出订阅(observe)、解绑(remove)方法,外部调用这个订阅方法,传入需要的指令,例如:车门、车灯等,就可以处理相关的业务了。

Q5. 请简短说明 MQTT 的三种模式 和 WebSocket 接口有哪几个回调方法作用

MQTT 的“模式”通常指其服务质量等级,决定了消息传递的可靠性:

  • QoS 0 (At most once): 最多一次。消息发送后不确认,可能会丢失。适用于对实时性要求高但允许丢包的场景(如传感器频率数据)。
  • QoS 1 (At least once): 至少一次。确保消息到达,但由于确认机制,接收方可能会收到重复消息。
  • QoS 2 (Exactly once): 只有一次。通过四步握手确保消息不丢不重,开销最大,适用于金融支付等严谨场景。

WebSocket 协议主要通过以下四个事件回调进行生命周期管理:

  1. onOpen:
    作用: 连接建立成功时触发。
    场景: 此时可以开始向服务端发送数据,通常用于初始化握手或发送心跳。
  2. onMessage:
    作用: 接收到服务端推送到客户端的数据时触发。
    场景: 处理业务逻辑,如解析 JSON 数据、更新 UI。
  3. onError:
    作用: 通信过程中发生错误(如网络中断、协议非法)时触发。
    场景: 用于异常捕获和日志记录。
  4. onClose:
    作用: 连接关闭时触发。
    场景: 执行清理操作,或根据业务需求启动断线重连机制。
http://www.jsqmd.com/news/656315/

相关文章:

  • 2026北京学历提升机构对比评测:5大热门机构全方位横评,谁更值得托付? - 商业科技观察
  • 邻接表转逆邻接表:C语言实现与内存管理避坑指南
  • 终极迁移指南:3步从Photoshop无缝切换到开源图像编辑
  • 【效率工具】you-get + ffmpeg:从命令行到自动化,打造个人影音素材库
  • 告别编码混乱!手把手教你用Naki.CI插件搞定PDMS材料编码(附数据库配置避坑指南)
  • Windows系统优化终极指南:如何使用Winhance实现全方位系统调校
  • BEYOND REALITY Z-Image可部署方案:无需修改代码的权重注入式升级路径
  • USB-HID学习笔记
  • 把文档显示在dockpanel上的几种方法
  • 直线电机在 OLED 精细金属掩模板(FMM)中的精密应用
  • X86平台UOS与麒麟双系统共存:从分区规划到引导修复的实战指南
  • 告别w3m和curl:一个Go写的命令行工具,让Ubuntu Server校园网认证变简单
  • 【Linux系统加餐】 mmap 文件映射全解:从底层原理、API 到实战开发(含 malloc 模拟实现)
  • 告别订单号被猜!实战改造滴滴Tinyid,让Long型ID也能防扫库
  • 避开SAP月结大坑:物料分类账CKM3的5个常见错误配置与修复指南
  • 从七桥问题到算法竞赛:图解Fleury与Hierholzer,谁才是寻找欧拉路径的更优解?
  • 2026 企业级知识与数据部署厂商全景 (最新):覆盖知识库部署、AI 知识库、Deepseek 部署、智能 BI 私有化全类型服务商 - 品牌2026
  • FreeCAD绘图尺寸标注插件深度解析:专业工程制图的终极指南
  • Winhance中文版:5分钟完成Windows系统优化的免费神器
  • 零基础AI学习:数学基础要求与补充指南
  • 国产臭氧老化试验箱哪个品牌的好?常见靠谱品牌有哪些? - 品牌推荐大师1
  • BepInEx 完全指南:轻松为 Unity 游戏安装插件和模组
  • 别光看理论了!手把手教你用Zemax 2023版搞定几何像差优化(附仿真文件)
  • 强承诺比弱承诺便宜——《窗口期:中国广播产业的十年抉择》系列第五篇(收官)
  • 2026年网易企业邮箱渠道价格,各版本费用明细 - 品牌2025
  • 二维数组“降维”到一维数组----从零开始的算法
  • 【资源管理】信息系统项目管理师论文范文
  • BepInEx终极指南:3分钟学会Unity游戏插件框架,让游戏扩展如此简单![特殊字符]
  • 避开伽马能谱分析的5个常见坑:从探测器选择到数据解读的实战经验
  • Kandinsky-5.0-I2V-Lite-5s Web服务安全加固:JWT鉴权+速率限制+上传文件类型校验