【Android系统开发】车载系统蓝牙音乐进度跳变,走秒不平滑

本文分析了Android9中控系统的蓝牙音乐进度不平滑问题,源于蓝牙协议栈中处理任务和HCILOG存储在同进程下导致的阻塞。问题焦点在于btsnoop.cc中TEMP_FAILURE_RETRY(writev)函数的重试机制。解决方案尝试了分线程处理但复杂性高,目前推荐关闭HCILOG存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:

中控系统采用Android 9,原生蓝牙协议栈,IVI蓝牙音乐进度跳变,走秒不平滑

先说结论:

蓝牙协议栈中对HCI命令的处理任务和HCI LOG的存储任务处于同一个进程,当HCI LOG存储发生阻塞时,查询歌曲进度和解析歌曲进度的HCI命令处理任务也阻塞了,最终导致蓝牙音乐的歌曲进度变化不平滑。

原因分析:

罪魁祸首就是btsnoop.cc中的btsnoop_write_packet函数,其中有一行代码:

TEMP_FAILURE_RETRY(writev(logfile_fd, iov, 2));

宏定义TEMP_FAILURE_RETRY表示当传入的函数失败后,会不断重复执行,直到执行成功为止

,其在unistd.h的实现如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值