写了一个可以记录路线的计步器,好像有内存泄露问题,求指点
2017-01-02 12:39
232 查看
Timer 和 Handler的相关代码如下:
程序刚开始运行一切正常,一段时间以后,会变得很卡,点击事件响应很慢,看了看内存占用偏高,是内存泄露问题吗,求指点。
Handler handler = new Handler(){ @Override public void handleMessage(Message msg){ super.handleMessage(msg); if(msg.what == 1){ countDistance(); countStep(); circleBar.setProgress(total_step, target_distance); if(flag){ circleBar.startCustomAnimation(); flag = false; } if (timer != 0 && distance != 0.0){ calories = weight * total_step* step_length * 1.036 * 0.001; calory_consume = calories; } else { calories = 0.0; } if(total_step == target_distance){ Intent service = new Intent(getActivity(),StepCounterService.class); getActivity().stopService(service); } circleBar.setMax(target_distance); //更新ui tv_distance.setText(formatDouble(distance)); tv_calory.setText(formatDouble(calories)); tv_sugar.setText(formatDouble(calories / 4.1)); tv_time.setText(getFormatTime(timer)); //定位相关 if(isStartLoacation){ //防止信号不好的时候p1和p2为空,异常 if(p1 != null && p2 != null){ pointstwo.add(p1); pointstwo.add(p2); OverlayOptions ooPolyline = new PolylineOptions().width(4).color(0xAAFF0000).points(pointstwo); mOverlay2 = mBaiduMap.addOverlay(ooPolyline); p1 = p2; mLocClient.requestLocation(); }else{ mLocClient.requestLocation(); } } } } }; public void startTimer() { if (mtimer == null) { mtimer = new Timer(); } if (mtask == null) { mtask = new TimerTask() { @Override public void run() { // TODO Auto-generated method stub Message message = new Message(); message.what = 1; handler.sendMessage(message); if (StepCounterService.flag) { if(startTimer != System.currentTimeMillis()){ timer = tempTimer + System.currentTimeMillis() - startTimer; } } } }; } if (mtimer != null && mtask != null) { mtimer.schedule(mtask, 0, 200); } } public void pauseTimer() { if (mtimer != null) { mtimer.cancel(); mtimer = null; } if (mtask != null) { mtask.cancel(); mtask = null; } }
程序刚开始运行一切正常,一段时间以后,会变得很卡,点击事件响应很慢,看了看内存占用偏高,是内存泄露问题吗,求指点。
相关文章推荐
- 一个JS图片放大镜,实现动态记录的图片放大,避免内存泄露,解决IE6下无法遮盖select控件问题
- 一个JS图片放大镜,实现动态记录的图片放大,避免内存泄露,解决IE6下无法遮盖select控件问题
- 一个常见的android内存泄露 问题
- 一个C语言典型的内存泄露问题
- 一个不经意的内存泄露问题
- 一个诡异的C++内存泄露问题。
- 一个内存泄露问题的定位
- 利用运行时,给UIImageView写一个分类,交换里面的setImage的方法,可以重绘图片,提高内存的利用率(要是没有重绘图片,直接使用系统提供的setImag就会造成占用大量的内存问题)
- [置顶] 记录一个指针问题(内存空间的初始化)
- Go/Python/Erlang编程语言对比分析及示例 基于RabbitMQ.Client组件实现RabbitMQ可复用的 ConnectionPool(连接池) 封装一个基于NLog+NLog.Mongo的日志记录工具类LogUtil 分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
- node.js内存泄露问题记录
- 一个常见的android内存泄露 问题
- 记录:关于匿名Handler内存泄露问题
- node.js内存泄露问题记录
- 学习Discuz! X3.2记录:一个小提示,可以知道插件php文件语法出问题了
- leakcanary作者发现的一个Dialog的各种listener容易引发的内存泄露问题
- 一个常见的android内存泄露 问题
- 如果系统能够保证不在0x000000007fffffff以上的地址分配内存,那么应用程序就能够正常运行。把一个高33位都为0的64位地址截断为32位地址,无论如何都不会产生问题。系统可以提供这一保证,
- 修正了一个内存泄露的问题
- 一个Unity材质赋值内存泄露问题