项目总结

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

 

项目介绍

通过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();
            }
        }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值