android 串口一直打开_Android开发板长时间开启线程读取串口数据app自动关闭的问题...

本文讲述了在Android开发中遇到的一个问题:应用通过串口接收温湿度数据,设置为常亮状态后,经过两三天会自动关闭。在全局异常捕获未捕获任何错误信息。对比实验表明,当不开启读取线程时,App可以稳定运行七天以上。代码展示了数据处理部分,包括串口数据解析和UI更新。作者寻求帮助,希望能找出导致App无法长时间运行的原因。
摘要由CSDN通过智能技术生成

应公司要求,最近使用了android开发板,开发了一套通过串口去接收探头传送过来的温湿度数据的app。主要目的还是为了一直采集数据,将数据用于分析,故要求app能够长时间稳定的运行。

首先已经将主Activity设置为常亮状态

但在实际使用过程中,发现经常程序采集两三天之后,app已自动关闭,并且在已经全局捕获异常的情况下,没有抓到任何的报错报文。

于是,做了另外一个测试,不去开启线程,让app空跑,发现没有任何问题,能够持续的运行七天以上。

开启线程的代码如下

数据处理部分的代码如下`try{

Bean bean = new Bean();

String[] res = ((String) msg.obj).split(" ");

if (res.length == 8) {

int a1 = Integer.parseInt(res[1], 16);

for (int i = 0; i < Constants.sensorSetBeans.size(); i++) {

if (a1 >= Constants.sensorSetBeans.get(i).getMin() && a1 <= Constants.sensorSetBeans.get(i).getMax()) {

if (a1 < 10) {

bean.setSensorId("00" + a1);

} else if (a1 < 100) {

bean.setSensorId("0" + a1);

} else {

bean.setSensorId(a1 + "");

}

bean.setDeviceId(Integer.toString(Integer.parseInt(res[0], 16)));

String s1 = res[2] + res[3];

String s2 = res[4] + res[5];

int a = Integer.parseInt(s1, 16);

int b = Integer.parseInt(s2, 16);

int c = Integer.parseInt(res[6], 16);

Date curDate = new Date(System.currentTimeMillis());

bean.setRightTime(formatter.format(curDate));

Double temp = Double.parseDouble(a + "") * 175.72 / 65536 - 46.85;

Double humidity = Double.parseDouble(b + "") * 125 / 65536 - 6;

Double v = (Double.parseDouble(c + "") + 200) / 100;

if (v < 3) {

lowBatMap.put(bean.getSensorId(), "");

String s = "";

for (Map.Entry entry : lowBatMap.entrySet()) {

if (s.equals("")) {

s = entry.getKey();

} else {

s = s + "," + entry.getKey();

}

}

tvDanger3.setText(s);

}

bean.setHumility(String.format("%.2f", humidity));

bean.setTemp(String.format("%.2f", temp));

bean.setBat(String.format("%.2f", v));

bean.setSignal(Integer.parseInt(res[7], 16) + "");

Constants.map.put(bean.getSensorId(), bean);

if (Constants.templateMap.get(bean.getSensorId()) != null && !"".equals(Constants.templateMap.get(bean.getSensorId()))) {

TemplateBean templateBean = gson.fromJson(TemplateDb.getInstance(ReceiveModuleAct.this).selectAll().get(Integer.parseInt(Constants.templateMap.get(bean.getSensorId()))), new TypeToken() {

}.getType());

double max = templateBean.getTop();

double min = templateBean.getDown();

if (temp < min) {

bean.setState("0");

} else if (temp > max) {

bean.setState("2");

} else {

bean.setState("1");

}

}

Iterator iter = Constants.map.keySet().iterator();

Constants.keyList.clear();

while (iter.hasNext())

if (!tagb) {

sensorAdapter.refresh(Constants.keyList);

} else {

sensorAdapter.refresh(showList);

}

break;

}

}

}

}catch (Exception e){

}`

数据处理部分的功能主要是把接收到的数据处理好,并且刷新到页面上,app的界面如图

想请教下为什么app无法长时间运行,问题是由哪一部分的功能模块导致的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值