应公司要求,最近使用了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无法长时间运行,问题是由哪一部分的功能模块导致的。