首页 > 学院 > 开发设计 > 正文

红外项目总结

2019-11-09 15:45:50
字体:
来源:转载
供稿:网友

红外项终于告一段落了,趁着空闲时间,特来总结一番。

项目介绍

通过wifi连接热像仪(设备),连接成功后每隔5s向热像仪发送心跳包,同时接受热像仪发送的心跳包。通过一些指令,实现对热像仪进行调焦,温度校正、电子变倍、设备抓图、实时监控(实时视频播放)等操作,也可通过指令将热像仪抓的图和录制的视频下载到本地,进行一系列的分析操作。

内存溢出分析总结

开发项目中遇到的最让人头疼的问题,莫过于内存溢出了。由于项目中大量涉及到了对byte数组的使用(拷贝,拼接、查找)等,一不小心就outofmemory了。总结出需要注意以下两个知识点的使用

1> 多线程中锁的使用----项目中接收数据和处理数据是在不同线程里处理的,没加锁使得后面的数据处理不对,数据不能够及时被释放掉,导致用于存放数据的byte数组无限增大……

2>内存分析工具的使用(MAT),在android studio中,点击monitor,先initiate GC,然后Start Allocation Tracking,最后Dump java Heap.在项目captures下会生成分析的hPRof(Dalvik格式)文件,将该文件通过android sdk下的hprof-conv.exe 执行hprof-conv dump.hprof converted-dump.hprof,从Dalvik格式转换成J2SE HPROF格式,最后使用下载的MemoryAnalyzer.exe工具打开hprof文件进行分析【使用代码成功hprof文件链接:http://blog.csdn.net/sodino/article/details/38512473】

知识点总结

1、socket使用----项目里使用的是原始(一开始打算使用netty框架进行socket编程,但由于项目本身的特殊性[接收到的是原始的byte字节,没有标识长度],最终放弃使用)

2、byte使用 byte范围-128-127,byte转换成int  需要使用google的无符号转换方法 UnsignedBytes.toInt() ---compile 'com.google.guava:guava:20.0'

2、litepal数据库使用,该开源框架使用起来特别方便,采用了对象关系映射(ORM)的模式,对数据库常用的方法进行了封装,无需用户编写sql语句------compile 'org.litepal.android:core:1.3.2'

3、surfaceview使用,注意点【1】:surfaceview设置背景不可再xml里设置会导致更新界面无效,可在callback的surfaceCreated方法中绘制背景色【2】:切换surfaceview大小时会出现黑边,需要在callback的surfaceChanged回调中设置setFixedSize(width, height); 【3】:布局里包含surfaceview,使用getDrawingCache截图,会导致截图失败

4、曲线绘制--achartengine使用---compile files('libs/achartengine-1.2.0.jar')

5、范围选择控件--rangeseekbar使用  ---

 compile 'com.yahoo.mobile.client.android.util.rangeseekbar:rangeseekbar-library:0.1.0'

6、图形(点、线、圆、矩形)添加,放大缩小,移动操作

7、系统方法使用:数组合并:System.arraycopy(Object src, int srcPos, Object dst, int dstPos, int length)

                          数组截取:Arrays.copyOfRange(byte[] original, int start, int end)

8、创建文件夹,File dir = new File(saveDir)在android高版本手机上创建失败           if (!dir.exists()) {               dir.mkdirs();           }

         需改为 String[] path = filePath.split("/");        for (int i = 0; i < path.length; i++) {             if (newPath == null) {                newPath = path[i];            } else {                newPath = newPath + "/" + path[i];              }            file = new File(newPath);            if (!file.exists()) {                file.mkdir();            }        }


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表