谈谈项目中的内存泄露

【开源数据集】电动车佩戴头盔检测数据集(TWHD) 佩戴头盔检测数据集VOC格式图像与标注数量各5448张 阅读详情


前言

所举实例,皆为项目中实际遇到,如有描述错误,欢迎评论指正,感谢


提示:以下是本篇文章正文内容,下面案例可供参考

一、Looper 导致内存泄露

描述:
BaseActivity 有个线程,内部实现了 Looper.prepare(); … Looper.loop(); 因为其内部是个死循环,而且还持有子activity引用,
解决:
destroy时调用 该子线程 所持有loop 的quit方法

二、Activity 传给长生命周期对象

描述:
在activity中 尽量不要把this 传给其他对象,特别是第三方框架,因为不知道其内部如何引用,检查的时候也比较困难。
解决:
长生命周期对象 如单例 传Application , 因为传Application 是跟随app的生命周期的,app一退出,所有内存也烟消云散。

三、实例化其他类的静态接口

描述:
比如A(Activity或Fragment)类内部 实例化了一个B类的静态接口,该接口会持有B 对象的引用,导致A 对象不可被回收.
解决:
在A(Activity或Fragment) 退出时,手动将该接口置空 如 B.callback = null

四、内部类和匿名内部类

描述:
不论是内部类还是匿名内部类 都默认持有外部类的引用,有时候需要将 实例化它类的接口,和一些广播接收器 传给外部,外部就间接持有了该类。注意:此处外部是长生命周期对象
解决:
在(Activity或Fragment)退出时,手动将外部所引用的接口或回调置空,注意外部类使用这些东西时尽量做些判空操作。

五、Fragment 中 addFragment

描述:
后者(被addFragment 的 Fragment)会生命周期会跟随前者依附的activity 变化,就是 前者退出时 会回调onDestroy,而在其内部add的fragment 则不会回调onDestroy!!! 注意:后者内部有耗时操作,切在其onDestory 中释放资源
解决:
这也不全算内存泄露,因为如果是在MainActivity 此时就算内存泄露,如果是其他activity 在你退出时,那个fragment 也会随之销毁,内存也随之被回收。


总结

1.内存泄露就一句话,长生命周期对象持有短生命周期对象,造成内存不可被回收。

2.上面没写Handler 导致内存泄露,是因为 在项目中真不是那么容易写出来的,写Android 听过最多的就是 Handler 导致内存泄露,就算写出来 编译器 也给你报一片黄,这个应该是每个安卓开发者都会留意的地方
3.出现问题往往是使我们放松警惕的地方,其实编码中稍加留意,上面问题都是可以避免,

最后祝大家写代码永远没有bug。

你浸淫于程序的迷城,坚持心中的梦想。关心你的朋友,只能在城外锣鼓喧天摇旗呐喊,其实你只需要静谧的私人空间。世人需要娱乐,你开发出游戏。世人需要朋友,你做出交友网站。世人需要聊天,你编写出两只企鹅。你就是网络上最可爱的人,向你致敬!程序员

FortiOS 存在身份验证绕过导致命令执行漏洞(CVE-2024-55591) FortiOS 是 Fortinet 公司开发的操作系统,作为 Fortinet 安全平台的核心,提供全面的网络安全功能。 它将网络和安全功能无缝集成,支持跨本地、云、混合和融合 IT/OT/IoT 基础设施环境的统一管理。 FortiOS 7.6 版本引入了生成式人工智能助手、数据保护、托管服务和单一代理等新功能,进一步增强了其安全性和性能。 阅读详情

相关推荐

R语言影像组学实战:从医学图像到预测模型的完整流程(附代码)

本文详细介绍了使用R语言进行影像组学分析的完整实战流程。从环境搭建、数据准备,到医学图像的特征提取与筛选,再到利用机器学习构建预测模型并进行评估,提供了清晰的步骤和可运行的R代码示例,帮助研究者和数据分析师掌握从医学图像到临床预测模型的核心技术。

qsc901234的博客 732

Fragment的正确使用避免内存泄漏

这里之所以起这个名字,是因为Fragment的用法实在太多,这里为了记录下,给出一个通用,常用的方案,避免造成内存泄漏,只要保证了内存不泄漏,你可以随便折腾Fragment的用法。 用法多体现在: 第一,你可以直接跟activity静态绑定;也可以动态; 第二,使用FragmentManager、FragmentTransaction管理的时候,根据Fragment的显示场景,可以replace(layoutId, newFragment, false); 也可以add,popStack,show, hid

jzlhll123的专栏 1万+

Pytorch.nn.Linear 解析(数学角度)

pytorch.nn.Linear 是一个类,下面是它的一些初始化参数 in_features : 输入样本的张量大小 out_features : 输出样本的张量大小 bias : 偏置 它主要是对输入数据做一个线性变换。 y=xAT+b y=xA^T+b y=xAT+b 这里A是权重矩阵,b是偏置。他们都是根据 in_features 生成 测试代码: m = torch.nn.Linea...

Medlen 1万+

Android 内存泄漏的常见原因及其对应的解决方案

LeakCanary由Square开发,是一个强大的开源库,用于检测Android应用程序中的内存泄漏。内存泄漏是指在应用程序中不再需要的对象仍然保持对内存的引用,导致内存无法回收,从而造成内存溢出和性能问题。LeakCanary可以自动检测和报告应用程序中的内存泄漏,并提供详细的信息,帮助开发人员快速定位和修复问题。

特立独行的博客 5869

运算放大器 VS 仪表放大器

运算放大器(Operational Amplifier, 简称 Op Amp)和仪表放大器(Instrumentation Amplifier, 简称INA)在电子电路设计中都有非常广泛的应用,但两者在结构、特性以及应用场景上都有明显的区别。以下是它们之间主要的差异:运算放大器(Op Amp)仪表放大器(INA)运算放大器仪表放大器运算放大器仪表放大器运算放大器仪表放大器运算放大器仪表放大器总之,运算放大器是通用型放大元件,需要设计者自己做额外的电路配置;而仪表放大器则是针对高精度测量差分信号而生,内部匹配

chinahongjiang的博客 1346

告别实车测试:手把手教你用Vector VT平台搭建OBC/DCDC的HIL测试台架

本文详细介绍了如何利用Vector VT平台搭建新能源汽车OBC/DCDC的HIL测试台架,涵盖硬件选型、模型部署到自动化测试的全流程。通过HIL仿真测试技术,工程师可以高效验证动力域关键部件,大幅缩短开发周期并降低成本,特别适合新能源汽车三电系统的开发验证。

weixin_42659194的博客 338

android activity泄漏,Android笔记-Activity相关+内存泄漏+Fragment+service

看了下,上次学习android还是17年的事情,,,,两年过去了我现在终于来搞android了。。。 官网有一段基础描述:https://developer.android.google.cn/guide/components/fundamentalsAndroid 应用采用 Java 编程语言编写。Android SDK 工具将您的代码 — 连同任何数据和资源文件 — 编译到一个 APK:A...

weixin_32419787的博客 315

从问卷到结论:手把手教你用SPSS 28完成一份完整的社科数据分析报告

本文详细介绍了如何使用SPSS 28完成社会科学研究中的数据分析报告,从问卷数据导入、清洗到描述性和推断性统计分析,再到结果呈现与报告撰写。通过实际案例演示,帮助研究者掌握SPSS 28的核心功能,提升数据分析效率与报告质量。

weixin_28717431的博客 248

[Android进阶]Java、Android 内存泄漏总结

Java、Android 内存泄漏总结内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,就是该被释放的对象没有释放,一直被某个或某些实例所持有却不再被使用导致 GC 不能回收。最近自己阅读了大量相关的文档资料,打算做个 总结 沉淀下来跟大家一起分享和学习,也给自己一个警示,以后 coding 时怎么避免这些情况,提高应用的体验和质量。我

陶程的博客 5306

YOLOv13手把手添加YOLOv13注意力机制:Biformer(BiLevelRoutingAttentio)YOLOv13双层路由注意力 革命性的高效注意力机制深度解析YOLOv13YOLOv1

YOLOv13 BiLevelRoutingAttention是一种革命性的高效注意力机制,YOLOv13通过双层路由策略显著降低了计算复杂度。YOLO它将注意力计算分为区域级路由和令牌级注意力两个层次,前者选择最相关的K个区域,后者仅在选定区域内执行注意力计算。这种设计借鉴了人类视觉系统的分层处理机制,在保持长距离依赖建模能力的同时,将复杂度从O(N²)降至O(NK + P⁴)。该机制还集成了可微分路由、自适应参数和LePE位置编码等创新技术,YOLOv13 YOLOv13 YOLOv13 YOLOv13

FJN110的博客 659

彻底解决Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

Failed to configure a DataSource: ‘url‘ attribute is not specified and no embedded datasource

renkai721的专栏 24万+

SpringBoot项目启动内存泄漏问题排查与解决

在排查SpringBoot项目启动内存泄漏问题时,不仅要关注项目本身的内存设置和代码问题,还要关注服务器硬件资源的使用情况。通过df -shdu -sh和du -sh *等命令,可以有效地帮助我们定位磁盘空间不足的问题。在解决问题时,要综合考虑各种因素,确保项目能够稳定运行。希望我的经验能对大家有所帮助,如有疑问,欢迎在评论区留言讨论。

m0_50217592的博客 3054

华为OD机试 - 停车场费用统计 - HashSet(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。停车场统计当日总收费,包月的车不统计,不包月的车半个小时收一块钱,不满半小时不收费,如果超过半小时,零头不满半小时按半小时算,每天11:30-13:30时间段不收费,如果一辆车停车时间超过8小时后不收费。现提供停车场进出车辆的统计信息,需要你来计

学Java,找哪吒 238

个人谈谈对ThreadLocal内存泄露的理解

首先,我们采用普通的map集合作为线程副本数据存储实现,那么当前我们的应用程序失去了对ThreadLocal对象的强引用时,我们就再也无法通过ThreadLocal去访问ThreadLocalMap中我们存储的线程副本数据了,那么此时就可以认为这样一对key:value键值对是垃圾,需要被回收掉。对于普通的map实现而言,我们无法区分到底哪些ThreadLocal对象确定是应用程序不再访问的,可以被回收掉的,因此也就无法回收这些垃圾键值对占据的空间了,反而会导致某种意义上的内存泄露。

m0_53157173的博客 2500

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【JAVA】谈谈内存泄露

谈谈内存泄露 应届生面试中,常常被问到内存泄露,比方说什么是内存泄露呀?造成内存泄露的情况等等。本菜今天就总结一下内存泄露方面的几点小知识。 一、什么是内存泄露 不再被使用的对象持续占据内存,造成内存浪费的情形称作内存泄露。这些对象被某些变量引用着,因此垃圾回收器无法回收它们。关于垃圾回收器如何判断...

阳阳的博客 4769

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

JUC并发编程第十篇,谈谈ThreadLocal原理与内存泄露的那些事儿

1、ThreadLocal 不是解决线程间共享数据问题的,而是用于 变量在线程间隔离且在方法间共享的场景。2、它隐式的在不同线程内创建独立实例副本,避免了实例线程的安全问题。3、每个线程持有一个只属于自己的Map,维护了ThreadLocal对象与具体实例的映射,该Map只能被持有它的线程访问,故不存在线程安全以及锁的问题。4、ThreadLocalMap 的 Entry 对 ThreadLocal 的引用为弱引用,避免了 ThreadLocal 对象无法被回收的问题。

I wanna be myself, where I Belong. 448

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

头条二面:你确定ThreadLocal真的会造成内存泄露?

本文换个角度,先思考ThreadLocal体系中的ThreadLocalMap为什么要设计成弱引用,再引申并辩证思考是否会发生内存泄露。

中间件兴趣圈 5472

谈谈什么情况下会导致内存泄露

Android 的虚拟机是基于寄存器的 Dalvik,它的最大堆大小一般是 16M,有的机器为 24M。因此我们所能利用的内存空间是有限的。如果我们的内存占用超过了一定的水平就会出现 OutOfMemory 的错误。 内存溢出的几点原因:1、资源释放问题 程序代码的问题,长期保持某些资源,如 Context、Cursor、IO 流的引用,资源得不到释放造成内存泄露。2、对象内存过大问题 保存了

LuoYangMian的博客 781

谈谈Java中的内存溢出和内存泄露问题

内存溢出(OOM)是指可用内存不足。程序运行需要使用的内存超出最大可用值,如果不进行处理就会影响到其他进程,所以现在操作系统的处理办法是:只要超出立即报错,比如抛出内存溢出错误。就像杯子装不下,满了要溢出来一样,比如一个杯子只有500ml的容量,却倒进去600ml,于是水就溢出造成破坏。内存泄漏(Memory Leak)是指本来无用的对象却继续占用内存,没有再恰当的时机释放占用的内存。不使用的内存,却没有被释放,称为内存泄漏。也就是该释放的没释放,该回收的没收回。

qq_30713721的博客 299

谈谈你对ThreadLocal的理解

可用于问题。:每个线程保存一份自己的对象,ThreadLocal这个作用就是让。每个线程都独立使用自己的变量副本,这样就不会影响其他的线程。也就是说每个线程都会复制一份对象到自己的线程里面去,线程之间是隔离的,所以不会出现线程之间使用同一份资源而造成问题。ThreadLocal是为多线程环境下变量安全提供的一种解决思路,ThreadLocal是为每个线程建立一份自己的单独的变量副本。每个线程都可以独立地去改变自己的变量副本,从而不会影响其他的线程。

qq_46130027的博客 894

谈谈.NET中常见的内存泄露问题——GC、委托事件和弱引用

一、什么是内存泄露(memory leak)? 内存泄露不是指内存坏了,也不是指内存没插稳漏出来了,简单来说,内存泄露就是在你期待的时间内你程序所占用的内存没有按照你想象中的那样被释放。 因此什么是你期待的时间呢?明白这点很重要。如果一个对象占用内存的时间和包含这个对象的程序一样长,但是你并不期望是这样。那么就可以认为是内存泄露了。用具体例子来说明如下: class Button {

u012158742的专栏 483

来聊聊ThreadLocal内存泄露分析

前几天有个学生问我ThreadLocal存在不存在内存泄漏,趁此机会和大家聊聊ThreadLocal到底存在不存在内存泄漏以及怎么避免。 Thread中的threadLocals属性 一切都要从Thread的一个属性threadLocals说起,让我们看下这个属性的介绍: /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ Th...

软件开发实战项目分享 1244

谈谈引用与ThreadLocal内存泄露的那些事

ThreadLocal 当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达的意思。可以理解为如下三点: 1、每个线程都有自己的局部变量 每个线程都有一个独立于其他线程的上下文来保存这个变量...

m0_37809911的博客 296

java 内存泄露_java内存泄露

上一篇提到的是java垃圾回收,今天谈谈java的内存泄露。首先谈下java的内存管理机制:在Java程序中,我们通常使用new为对象分配内存,而这些内存空间都在堆(Heap)上。public classTest {public static voidmain(String args[]){Object object1 = new Object();//obj1Object object2 = n...

weixin_32205057的博客 162

浅析NSTimer & CADisplayLink内存泄露

偶得前言本篇文章中我们主要谈谈NSTimer\`CADisplayLink`在使用过程中牵扯到内存泄露的相关问题及解决思路(文章末尾会附上Demo),有时候我们在不知情的情况容易入坑,最关键你还不知道自己掉坑了,闲话不多说,让我们开始进入正题。NSRunLoop与定时器我们先来回顾一下NSRunLoop对NSTimer\`CADisplayLink`的影响。(为了方便,以下统称定时器)大家都知道定时

tingxin520的博客 365

Android优化浅谈之内存泄露

   今天我们谈谈Android内存泄露,谈到内存泄露就要了解一下Android的内存管理、如何判断内存泄露及一些常见内存泄露的处理方法。   首先,我们来了解一下Android内存管理。我们都知道Android应用框架是基于Java语言的,所以应用内存管理的工作也都由Java虚拟机来负责。Android系统使用的是不遵循JVM规范的Davlik虚拟机,与传统Java EE的JVM还是有些

潘洪金的博客 958
上一篇: 安卓自定义View - 基础
下一篇: 记一次 android studio 4.2以上版本要求jdk 11运行环境问题
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值