本文深入分析 Android Bluetooth 协议栈中 A2DP 音频会话终止的全流程。通过剖析
btif_a2dp_source_end_session()
核心函数及其关联调用链,揭示多线程协同、状态机驱动、硬件抽象层资源释放和编解码器清理的关键机制。流程涵盖从应用层指令下发到 HAL 层资源释放的完整路径,重点解析异步任务调度与同步资源清理的高效协同设计。
一、概述
蓝牙 A2DP Source设备的会话结束是一个涉及多模块协同的复杂过程,需兼顾实时性与资源安全性。整体流程以btif_a2dp_source_end_session
为入口,通过 “同步清理编解码器 + 异步终止会话” 的双路径设计,实现资源有序释放:
-
触发与调度:
btif_a2dp_source_end_session
作为入口函数,同步触发编解码器清理流程,同时通过线程调度启动异步会话终止操作,避免阻塞主线程。 -
异步会话终止:
btif_a2dp_source_end_session_delayed
负责核心终止逻辑,包括校验会话状态、停止音频流(btif_av_stream_stop
)、通知 HAL 层释放资源(end_session
)及记录 metrics,确保会话从协议层到硬件层的完整终止。 -
同步编解码器清理