Android性能优化:内存泄漏(只是做个总结笔记)

一篇文章教你搞定内存泄漏与排查流程——安卓性能优化 前言 内存泄漏可以说是安卓开发中常遇到的问题,追溯和排查其问题根源是进阶的程序猿必须具备的一项技能。小盆友今天便与大家分享一下这方面的一些见解,如有理解错误或是不同见解,可以于评论区留言我们进行讨论,如果喜欢给个赞鼓励下吧。 目录 1、JAVA内存解析 2、JAVA回收机制 3、四种引用 4、小结 5、安卓内存泄漏排查工具 6、内存泄漏检查与解决流程 7、常见的内存泄漏原因 1、JAVA内... 阅读详情

这个只是为了做个总结笔记,详情请移步到这位大佬的博客:点击这里进入

1、集合类

这个没啥好说的,不再使用的集合,记得要调用clear方法,然后置为null即可。

2、static关键字修饰的成员变量

2.1 原因

static关键字修饰的成员变量,其生命周期==应用程序的生命周期,当其引用了很耗资源的对象(例如:Activity的Context,Bitmap等等)的时候,将导致被引用对象的内存无法被回收,造成内存泄漏。

2.2 解决方法

  • 尽量避免使用static修饰,如果必须使用,要注意适时手动置空;
  • 使用弱引用WeakReference。

3、非静态内部类/匿名类

3.1 原因

非静态内部类/匿名类,默认持有外部类对象,因此导致外部类无法被回收。

3.2 解决方法

  • 非静态内部类设置为->静态内部类;
  • 使用弱引用来保存外部类的对象;

4、线程(Thread、Runnable、AsnycTask)

4.1 原因

和3差不多,都是因为其内部持有外部类的引用。

4.2 解决方法

  • 和3.2差不多,设置为静态内部类;
  • 在外部类的生命周期结束的时候,强制结束线程。

5、Handler

5.1 原因

因为Handler是一个匿名内部类(不要问我为什么,我也不知道为什么。。。。。知道的请告诉我一声。。。谢谢了),因此Handler会持有外部类的引用,而Message里面又会持有Handler的引用(这个得去看Handler、Looper、MessageQueue之间的关系才会知道了),因此,当Message还没有处理完的时候,外部类所占用的内存,是不会被回收的。

5.2 解决方法

  • 自定义一个内部类,继承Handler,用static关键字修饰这个内部类
  • 在自定义的Handler中,用弱引用来保存Activity
  • 在Activity结束以后,清空MessageQueue中所有的消息(Handler.removeMessages(int what);)

6、资源对象使用后未关闭

6.1 原因

  • 对于资源的使用(如 广播BraodcastReceiver、文件流File、数据库游标Cursor、图片资源Bitmap等),若在Activity销毁时无及时关闭 / 注销这些资源,则这些资源将不会被回收,从而造成内存泄漏

6.2 解决方法

  • 在Activity销毁时 及时关闭 / 注销资源
// 对于 广播BraodcastReceiver:注销注册
unregisterReceiver()

// 对于 文件流File:关闭流
InputStream / OutputStream.close()

// 对于数据库游标cursor:使用后关闭游标
cursor.close()

// 对于 图片资源Bitmap:Android分配给图片的内存只有8M,若1个Bitmap对象占内存较多,当它不再被使用时,应调用recycle()回收此对象的像素所占用的内存;最后再赋为null 
Bitmap.recycle();
Bitmap = null;

// 对于动画(属性动画)
// 将动画设置成无限循环播放repeatCount = “infinite”后
// 在Activity退出时记得停止动画

OK,暂时就写这么多了,做一下笔记。

从C-EPS到DP-EPS:手把手图解不同EPS类型怎么选,对你的车操控感影响有多大? 方向盘转动时那股细腻的阻尼感,高速过弯时令人安心的沉稳,或是狭窄车位里一根手指就能拨动的轻盈——这些看似微妙的差异,其实都源自转向系统电机那几厘米的安装位置变化。当我们谈论驾驶乐趣时,发动机参数和悬架调校总是占据C位,但真正连接驾驶者与车辆的神经末梢,恰恰是那套默默工作的电动助力转向系统(EPS)。不同EPS类型带来的操控特性差异,可能比马力数字更能定义一辆车的性格。 阅读详情

相关推荐

ROS Noetic + Realsense ROS 2.3.2 在鲁班猫4上的完整工作空间搭建与相机启动调试

本文详细介绍了在鲁班猫4(RK3588S)开发板上搭建ROS Noetic与Realsense ROS 2.3.2开发环境的完整流程,包括Realsense SDK安装、工作空间配置、D435i深度相机驱动调试等关键步骤,为机器人视觉系统开发提供实用指南。

weixin_33217202的博客 234

Android内存泄漏问题分析及解决方案

总结一下工作中最常见内存泄漏问题,也是自己之前踩过的坑,为了让大家少走弯路,系统全面总结一下内存泄漏问题分析原因及寻找解决方案。

成长之路 1253

人工智能,不止于模型:四步实现完整工作流

工程师越来越多地致力于将人工智能 (AI) 集成到自己的项目和应用中,同时不断着力提升自己的 AI 技能。面对 AI 问题,工程师首先要了解什么是 AI,以及如何将它纳入当前工作流,这看似简单,实则未必容易。在 Google 中搜索“什么是 AI?”会得到数百万条结果,包括不同程度的技术和相关信息。那么,对工程师而言,AI 意味着什么?人们对 AI 的关注主要集中在 AI 模型上,受此影响,工程师会迅速投入 AI 建模的研究。

r1832644594的博客 2805

Android内存优化13 内存泄漏常见情况4 资源未关闭泄漏

资源未关闭或释放导致内存泄露 在使用IO、File流或者Sqlite、Cursor等资源时要及时关闭。这些资源在进行读写操作时通常都使用了缓冲,如果及时不关闭,这些缓冲对象就会一直被占用而得不到释放,以致发生内存泄露。因此我们在不需要使用它们的时候就及时关闭,以便缓冲能及时得到释放,从而避免内存泄露。 1.数据库的cursor没有关闭。 操作...

weixin_33701251的博客 254

STM32F103C8T6驱动DM542步进电机:从CubeMX配置到按键控制的全流程避坑指南

本文详细介绍了如何使用STM32F103C8T6通过CubeMX配置驱动DM542步进电机的全流程,包括PWM频率计算、GPIO模式选择及按键控制实现。重点解决了常见硬件连接错误、PWM参数配置及加减速算法优化,帮助开发者快速搭建稳定的电机控制系统。

weixin_42741930的博客 306

Android开发——常见的内存泄漏以及解决方案(二)

0.前言 上一篇Android开发——常见的内存泄漏以及解决方案(一)中已经对部分可能会引发内存泄漏的情况进行了阐述,此篇将从图片、动画等资源角度介绍可能会造成内存泄漏的情况以及应对方法。6. 集合类导致内存泄漏很常见的一个例子就是图片的三级缓存结构,为了更好的用户体验,缓存机制必不可少,三级缓存分别为网络缓存,本地缓存以及内存缓存。...

关于Android开发的一些技术点总结 ╮( ̄▽ ̄”)╭ 1万+

【YOLO 系列】基于YOLO V8的智能车载交通标志识别系统【python源码+Pyqt5界面+数据集+训练代码】

本文详细介绍了基于YOLO V8构建智能车载交通标志识别系统的完整流程。从环境搭建、数据集准备、模型训练到PyQt5图形界面开发,提供了Python源码和实战代码,帮助开发者快速实现高精度、实时的交通标志检测应用,提升驾驶辅助系统的开发效率。

wdx012345的博客 966

android内存泄露优化

android手机给应用分配的内存通常是8兆左右,如果处理内存处理不当很容易造成OutOfMemoryError,我们的产品出现最多的错误也是OutOfMemoryError的异常,  在解决这个异常时在网上发现很多关于OutOfMemoryError的原因的介绍。  OutOfMemoryError主要由以下几种情况造成:  1.数据库的cursor没有关闭。   操作Sqlite数据库

billhello 528

Python图像处理之光斑分析

光斑是工程中经常出现的图像数据,其特点是目标明确,分布清晰。对光斑图像的分析,主要包括质心定位、目标截取以及半径拟合等。

微小冷的学习笔记 2855

YOLOv11改进 | 上采样篇 | YOLOv11引入DySample轻量级动态上采样器

虽然最近的基于内核的动态上采样器(如CARAFE、FADE和SAPA)的性能提升令人印象深刻,但它们引入了大量工作负载,主要是由于耗时的动态卷积和用于生成动态内核的额外子网。DySample模块的设计旨在解决现有动态上采样器的高计算开销和复杂性问题,同时提供更好的性能和效率。到此本文的正式分享内容就结束了,在这里给大家推荐我的YOLOv11改进有效涨点专栏,本专栏目前为新开的,后期我会根据各种前沿顶会进行论文复现,也会对一些老的改进机制进行补充,如果大家觉得本文帮助到你了,订阅本专栏,关注后续更多的更新~

tsg6698的博客 3125

pgm图像缩小C语言,OpenCV - opencv3 图像处理 之 图像缩放( python与c++实现 )

转自:https://www.cnblogs.com/dyufei/p/8205121.html一. 主要函数介绍1) 图像大小变换 cvResize ()原型:voidcvResize(const CvArr* src,CvArr* dst,intinterpolation=CV_INTER_LINEAR);说明:src 表示输入图像。dst表示输出图像。intinterpolation插值方法...

weixin_42205405的博客 730

Python 爬虫实战:去哪儿网机票价格爬取与出行比价分析

本文介绍了一个基于Python的机票价格监控系统,通过爬取去哪儿网数据实现多航线查询与智能比价。系统采用requests+BeautifulSoup+selenium技术栈,具备以下功能: 实时查询指定航线价格 历史价格追踪与分析 最低价推荐与价格预警 数据可视化展示 文章详细解析了去哪儿网的页面结构和反爬机制,提供了Selenium浏览器的完整配置方案,并实现了一个可稳定运行的机票采集爬虫。该系统能帮助用户掌握价格波动规律,选择最优购票时机,每年可节省可观的出行成本。

u014481728的博客 664

Android性能优化之常见的内存泄漏

前言对于内存泄漏,我想大家在开发中肯定都遇到过,只不过内存泄漏对我们来说并不是可见的,因为它是在堆中活动,而要想检测程序中是否有内存泄漏的产生,通常我们可以借助LeakCanary、MAT等工具来检测应用程序是否存在内存泄漏,MAT是一款强大的内存分析工具,功能繁多而复杂,而LeakCanary则是由Square开源的一款轻量第三方内存泄漏检测工具,当它检测到程序中有内存泄漏的产生时,它将以最直观的

【博客地址迁移到】:https://zhengxiaoyong.com 3万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Android 性能优化之内存泄漏检测以及内存优化(中)

上篇博客我们写到了 Java/Android 内存的分配以及相关 GC 的详细分析,这篇博客我们会继续分析 Android 中内存泄漏的检测以及相关案例,和 Android 的内存优化相关内容。 Android 内存泄漏案例和检测    常见的内存泄漏案例    Android 内存泄漏检测与修复    Android 内存优化 引用 http:/

Shawn_Dut的专栏 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Android性能优化之内存泄漏优化(工具篇)

当应用程序存在这些问题时,不再使用的对象无法被垃圾回收器回收,最终导致内存占用过高。

特立独行的博客 2345

Android内存泄漏总结和性能优化技巧

对于许多开发者来说,安卓性能优化往往是一个比较棘手的问题。由于安卓设备的种类繁多,硬件配置各不相同,因此优化的方法和策略也各不相同。同时,安卓应用的开发周期较长,往往需要不断地迭代和更新,因此优化也需要不断地持续和优化。 学习安卓性能优化的知识和技巧,是每个安卓开发者必备的技能之一。通过掌握安卓性能优化的基本原理和方法,我们可以更加深入地了解安卓设备的工作机制,理解应用的性能瓶颈,从而采取有效的优化策略和措施,提高应用的性能和稳定性,提升用户的满意度和留存率。

weitao_666的博客 1361

玩安卓必须要掌握的性能优化之内存泄漏

说起性能优化,大多数脑海里便会出现启动优化、UI绘制优化、内存优化等等。之前我也一直在做这些优化,一直没有勇气看内存泄漏的问题,觉得太难,但是,再难也要看啊,跑不了,那么就来吧(做完发现其实也不难)。 内存泄漏的分析很简单,Android Studio中就自带了工具profile: 直接点击这个按钮就会运行应用并进入相应界面: 点击图片中的MEMORY就进入内存的页面: 然后点...

Zhujiang 2788

Android性能优化之内存泄漏优化

内存泄漏是 Android 应用开发中常见的性能问题之一。我们可以通过了解内存泄漏的原因、使用内存分析工具和检测库,并采取相应的解决方法来优化应用程序的内存使用。

特立独行的博客 1049

Android 性能优化之内存泄漏的检测与修复

转载请注明本文出自 clevergump 的博客:http://blog.youkuaiyun.com/clevergump/article/details/52013873, 谢谢!在 Android 开发中, 内存优化是APP性能优化中很重要的一个部分. 而在内存优化中, 最重要的就是修复内存泄漏问题. 本文就来介绍一下内存泄漏的基本概念以及常用的检测手段.1. 什么是内存泄漏简单来说, 当一个对象不再被使

clevergump的专栏 7733

内存泄漏大集结:安卓开发者不可错过的性能优化技巧

内存泄漏是指程序中的某些对象或资源没有被妥善地释放,从而导致内存占用不断增加,最终可能导致应用程序崩溃或系统运行缓慢等问题。长时间持有Activity或Fragment对象导致的内存泄漏;匿名内部类和非静态内部类导致的内存泄漏;WebView持有Activity对象导致的内存泄漏;单例模式持有资源对象导致的内存泄漏;资源未关闭导致的内存泄漏;静态变量持有Context对象导致的内存泄漏;Handler持有外部类引用导致的内存泄漏;Bitmap占用大量内存导致的内存泄漏;

m0_59162559的博客 457

内存泄漏与排查流程——安卓性能优化

内存泄漏可以说是安卓开发中常遇到的问题,追溯和排查其问题根源是进阶的程序猿必须具备的一项技能。小盆友今天便与大家分享一下这方面的一些见解,如有理解错误或是不同见解,可以于评论区留言我们进行讨论,如果喜欢给个赞鼓励下吧。 篇幅较长,可以通过目录寻找自己所需了解的吧 目录 1、JAVA内存解析 2、JAVA回收机制 3、四种引用 4、小结 5、安卓内存泄漏排查工具 6、内存泄漏检查与解决流程 7、...

c_z_w的博客 1034

Android性能优化:内存泄漏的检测与解决

内存泄漏是指在程序运行过程中,由于疏忽或错误导致内存不再被使用,但未被释放,导致可用内存逐渐减少,最终可能导致应用崩溃或卡顿。内存泄漏是Android性能优化中需要重点关注的问题。通过使用Profiler工具、LeakCanary工具检测内存泄漏,以及优化代码、使用WeakReference和SoftReference等方法解决内存泄漏,可以有效提高应用性能,提升用户体验。

cao_xiang_qi8395的博客 362

Android性能优化之内存泄漏排查

内存泄漏是指在程序运行过程中,由于疏忽或错误导致程序未能释放已经不再使用的内存。随着时间的推移,内存泄漏会导致可用内存逐渐减少,最终可能导致应用崩溃。内存泄漏是Android应用性能优化中不可忽视的问题。通过了解内存泄漏的定义、影响、常见场景以及排查方法,开发者可以更好地预防和解决内存泄漏问题。同时,遵循预防内存泄漏的建议,可以降低内存泄漏的风险,提升应用性能。未来,随着技术的发展,内存泄漏排查方法将不断完善,开发者应持续关注并应用于实践。

2501_92488972的博客 442

Android性能优化:内存泄漏检测与修复

内存泄漏是指应用程序在运行过程中,由于疏忽或错误导致内存未能及时释放,导致可用内存逐渐减少,最终可能引发应用崩溃或卡顿。性能下降:内存泄漏会导致应用程序占用越来越多的内存,影响其他应用的运行,甚至导致系统整体性能下降。用户体验受损:应用卡顿、崩溃等问题会影响用户的使用体验,降低用户满意度。内存泄漏是影响Android应用性能的常见问题。通过使用Android Studio的Profiler工具、第三方检测工具以及采取相应的修复策略,开发者可以有效地发现和修复内存泄漏,提高应用性能,提升用户体验。

2501_92487875的博客 425

Android 如何做一次内存泄漏大排查

前言 眼瞅着还有一个月就过年,项目也没有那么忙了,技术老大要求做一做性能优化方面的工作。 而我的任务就是把项目中的内存泄漏撸一遍,然后安排对应的人处理。 说到内存泄漏,我也算是老手了,其实在 2016 年我就写个内存泄漏方面的文章: Android 如何有效的解决内存泄漏的问题 把内存泄漏的地方找出来 说干就干,首要的任务就是把内存泄漏的代码揪出来,我选择 leakcanary github 地址:https://github.com/square/leakcanary/ 关于 leakcanary 的介绍

赵彦军 2638

Android性能优化之内存泄漏处理(图文)

每次来公司面试的人,一般都会问最基本的两个问题,一个是自定义View的绘制流程及事件分发,第二个就是性能优化内存泄漏如何处理?第一个问题基本上都能说个大概,第二个问题其实很多工作好几年的都不一定能回答的比较让人满意。这里整理下基本的内存泄漏及解决办法。使用的是LeakCannary来进行检测。 你能从本文了解到如下知识:1. 什么是内存泄漏 2. 内存泄漏的分类及影响 3.常见的内...

aserbao的博客 5153
上一篇: 关于写sdk的时候,避免jar冲突的一些小见解
下一篇: Android:调用系统分享功能
pgm_monkey
博客等级 码龄11年 3粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值