问题描述

测试步骤:

  1. 打开OH 设备三方hap
  2. 连接蓝牙
  3. 将三方hap切换到后台
  4. 随意操作其他应用

结果:

步骤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之后查询配对设备,自动对已配对设备发起连接。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐