【模板标题案例】Android 开发 Bug 记录及解决方法

项目场景:

示例:通过蓝牙芯片(HC-05)与手机 APP 通信,每隔 5s 传输一批传感器数据(不是很大)

问题描述:

示例:数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据
APP 中接收数据代码:

@Override
public void run() {
bytes = mmInStream.read(buffer);
mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();
}
/Handler 中代码,Handler 创建在上面,代码片段里没有截取/
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//处理消息
switch (msg.what) {
case READ_DATA:
String data = null;
if (msg.obj == null)
data = “暂无数据”;
else{
byte[] readBuf = (byte[]) msg.obj;
data = new String(readBuf, 0, msg.arg1);
showAll(data); //显示数据
}
default:
break;
}
}
};

原因分析:

示例:Handler 发送消息有两种方式,分别是 Handler.obtainMessage()和 Handler.sendMessage(),其中 obtainMessage 方式当数据量过大时,由于 MessageQuene 大小也有限,所以当 message 处理不及时时,会造成先传的数据被覆盖,进而导致数据丢失

解决方案:

示例:新建一个 Message 对象,并将读取到的数据存入 Message,然后 mHandler.obtainMessage(READ_DATA, bytes, -1, buffer).sendToTarget();换成 mHandler.sendMessage();,代码如下:

Message msg = Message.obtain();
msg.what = READ_DATA;
msg.obj = final_data; //final_data 就是从蓝牙中读取到的字符串
mHandler.sendMessage(msg);

你可能感兴趣的:(java,android,python,物联网,bug)