三方ble应用挂后台断连问题
·
问题描述
测试步骤:
- 打开OH 设备三方hap
- 连接蓝牙
- 将三方hap切换到后台
- 随意操作其他应用
结果:
步骤4之后,三方设备蓝色led灯闪烁,表示蓝牙断开连接
问题分析
通过snoop 日志查找到蓝牙断开的时间及原因

通过日志发现该情况下蓝牙的断开是由于OH 设备主动发送断连,时间08:03:38.693
查看08:03:38.693时间附近的蓝牙service 层hilog。可以发现service 层存在disconnect 的行为。

查日志

发现调用函数打印

通过该文件查找状态机变化

只能通过发送MSG_DISCONNECT 切换状态机状态。
通过业务排除,只能是被
![]()
触发。
通过上 hilog 找到扫描上报的第一个异常,OnRemoteDied。

通过代码搜索,配合ble 扫描业务,可以判定是services/bluetooth/server/src/bluetooth_gatt_client_server.cpp 中的接口调用。
查找Disconnect 接口

OnRemoteDied 通常是调用蓝牙service 的进程死亡。
查找三方hap 的进程号3878,

可以发现3878 三方hap进程被MemMgr 杀掉。

查看2190 MemMgr 进程号的hilog,可以发现是内核接口需要122492KB 的buffer,空间不够之后,杀掉优先级最低的进程,minPro = 400,也就是三方hap 进程,导致蓝牙ble 断开连接。
下一步
从问题的原因来说,该问题无法直接解决。
建议三方hap采用ble配对。每次重新进入hap之后查询配对设备,自动对已配对设备发起连接。
更多推荐
所有评论(0)