三方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)