写了一个可以记录路线的计步器,好像有内存泄露问题,求指点

2024-02-10 07:58

本文主要是介绍写了一个可以记录路线的计步器,好像有内存泄露问题,求指点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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;
}
}


程序刚开始运行一切正常,一段时间以后,会变得很卡,点击事件响应很慢,看了看内存占用偏高,是内存泄露问题吗,求指点。

这篇关于写了一个可以记录路线的计步器,好像有内存泄露问题,求指点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/696568

相关文章

Flask解决指定端口无法生效问题

《Flask解决指定端口无法生效问题》文章讲述了在使用PyCharm开发Flask应用时,启动地址与手动指定的IP端口不一致的问题,通过修改PyCharm的运行配置,将Flask项目的运行模式从Fla... 目录android问题重现解决方案问题重现手动指定的IP端口是app.run(host='0.0.

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

mysql关联查询速度慢的问题及解决

《mysql关联查询速度慢的问题及解决》:本文主要介绍mysql关联查询速度慢的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql关联查询速度慢1. 记录原因1.1 在一次线上的服务中1.2 最终发现2. 解决方案3. 具体操作总结mysql

国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)

《国内环境搭建私有知识问答库踩坑记录(ollama+deepseek+ragflow)》本文给大家利用deepseek模型搭建私有知识问答库的详细步骤和遇到的问题及解决办法,感兴趣的朋友一起看看吧... 目录1. 第1步大家在安装完ollama后,需要到系统环境变量中添加两个变量2. 第3步 “在cmd中

一文教你解决Python不支持中文路径的问题

《一文教你解决Python不支持中文路径的问题》Python是一种广泛使用的高级编程语言,然而在处理包含中文字符的文件路径时,Python有时会表现出一些不友好的行为,下面小编就来为大家介绍一下具体的... 目录问题背景解决方案1. 设置正确的文件编码2. 使用pathlib模块3. 转换路径为Unicod

Spring MVC跨域问题及解决

《SpringMVC跨域问题及解决》:本文主要介绍SpringMVC跨域问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录跨域问题不同的域同源策略解决方法1.CORS2.jsONP3.局部解决方案4.全局解决方法总结跨域问题不同的域协议、域名、端口

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

Redis 内存淘汰策略深度解析(最新推荐)

《Redis内存淘汰策略深度解析(最新推荐)》本文详细探讨了Redis的内存淘汰策略、实现原理、适用场景及最佳实践,介绍了八种内存淘汰策略,包括noeviction、LRU、LFU、TTL、Rand... 目录一、 内存淘汰策略概述二、内存淘汰策略详解2.1 ​noeviction(不淘汰)​2.2 ​LR

基于.NET编写工具类解决JSON乱码问题

《基于.NET编写工具类解决JSON乱码问题》在开发过程中,我们经常会遇到JSON数据处理的问题,尤其是在数据传输和解析过程中,很容易出现编码错误导致的乱码问题,下面我们就来编写一个.NET工具类来解... 目录问题背景核心原理工具类实现使用示例总结在开发过程中,我们经常会遇到jsON数据处理的问题,尤其是

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性