Android开发板长时间开启线程读取串口数据app自动关闭的问题

新手上路,请多包涵

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

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

clipboard.png

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

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

开启线程的代码如下

clipboard.png

数据处理部分的代码如下`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<String, Object> 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<TemplateBean>() {
                                    }.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<String> 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无法长时间运行,问题是由哪一部分的功能模块导致的。

阅读 2.9k
1 个回答
新手上路,请多包涵

各位大神,求指导啊

推荐问题