本文深入剖析Android蓝牙协议栈中A2DP音频传输停止流程,涵盖从用户请求触发、工作线程调度、资源释放到性能统计的全链路实现。通过分析
btif_a2dp_source_stop_audio_req
到btif_a2dp_source_audio_tx_stop_event
的代码执行路径,揭示多线程环境下的竞争规避策略、硬件抽象层(HAL)交互机制、资源释放原子性保障及性能指标收集等核心设计思想。流程涉及定时器管理、唤醒锁控制、UIPC通信等关键技术点。
一、概述
A2DP 音频传输的停止流程由两个核心函数驱动:btif_a2dp_source_stop_audio_req
发起停止请求,btif_a2dp_source_audio_tx_stop_event
执行具体停止操作。整体流程可分为以下关键阶段:
1. 停止请求发起:btif_a2dp_source_stop_audio_req
将停止操作调度到蓝牙工作线程,避免多线程竞争,确保操作顺序性。
2. 核心停止事件执行:btif_a2dp_source_audio_tx_stop_event
是流程的核心,包含:
-
状态校验:判断是否处于 offload 模式或非流传输状态,若满足则直接返回。
-
统计数据处理:记录会话结束时间,