前言
这几天似乎风平浪静,没有什么大的问题,领导就开始考虑体验度的事,说这个连接速度还是太慢,希望能够把速度提快,我个人认为应该没有太多的改进空间,但是领导要求了,我也只能硬着头皮看,结果发现了第三个坑.
蓝牙连接的等待时间不确定问题
我自己看了一遍原来的代码,发现有好几处等待,是故意等待的,问了相关的人员以后,才知道,微信的低功耗蓝牙在扫描完成以后,到连接之前,需要等到一个时间,官方说的三秒左右,于是乎,这位同事就等了个三秒,也就是说,实际的连接代码是这样:
setTimeout(() => {
wx.createBLEConnection({
deviceId: that.deviceId,
success: res => {
console.log('连接蓝牙', res)
if (res.errCode == 0) {
wx.showToast({
title: '蓝牙连接设备成功',
icon: 'none'
})
//连接成功后的代码
}
},
fail: err => {
console.log('连接失败:', err)
console.log(count):
},
complete: function(res) {
console.log('连接蓝牙执行', res)
}
})
}, 3000)
这代码我很难接受:无论如何都必须要等三秒
经过多次试验,貌似发现很多新手机只需要等个200-300毫秒就可以了,老手机也差不多1500毫秒,我猜测着三秒的话,估计是很差的那种手机了.
于是我改造了这块代码
BleUtils.tryConnect = function(count,flag){
if(count < 6 && flag == false){ //第一次进方法
//等待500毫秒执行一次连接
setTimeout(function(){
wx.createBLEConnection({
deviceId: that.deviceId,
success: res => {
console.log('连接蓝牙', res)
if (res.errCode == 0) {
wx.showToast({
title: '蓝牙连接设备成功',
icon: 'none'
})
BleUtils.tryConnect(1,true); //让他走连接成功的代码
}
},
fail: err => {
console.log('连接失败:', err)
BleUtils.tryConnect(count + 1 ,false); //失败后再次重试
},
complete: function(res) {
console.log('连接蓝牙执行', res)
}
})
},500);
return ;
}
if(count == 6){ //尝试连接 超过3秒
return;
}
if(flag == true){ //连接成功
//走成功逻辑
return;
}
}
思路跟前面的重连差不多,都是多次尝试,这样既兼顾了慢的手机,也照顾了快的手机,领导拿几台手机尝试,确实快了很多,十分满意.
然而,新的坑已经在路上..