Android性能优化之内存优化

Android性能优化(安卓性能优化)内存泄露 | 内存优化 | UI绘制优化 | 布局优化 | 图片加载 | 多线程优化 | 列表优化 | apk优化 在Android开发中,性能优化是软件开发中最难且也是知识面涉及最深、最广、最难的一个领域,更是开发一款优秀软件的必要条件。更快:App流畅,响应速度快更稳:App运行稳定,程序不崩溃(Crash)也不会无响应(ANR)更省:节省资源,包括电量,内存,存储,流量等。 阅读详情

一个Android手机的内存是有限的,所以APP默认分配内存大小也是有限的。
在Android里,程序内存被分为2部分:
native和dalvik,dalvik就是我们普通的Java使用内存,我们创建的对象是在这里面分配的,对于内存的限制是 native+dalvik 不能超过最大限制。android程序内存一般大部分限制在16M,也有的一小部分是24M。所以合理的利用内存在我们的公工作中就会变得很长重要。

 gDvm.heapSizeStart = 2 * 1024 * 1024;   // heap初始化大小为2M
 gDvm.heapSizeMax = 16 * 1024 * 1024;    // 最大的heap为16M 

其实项目中内存问题大部分出现在内存泄露和内存溢出中,前者占了大多数。
以下列举问题以及解决方案:

  1. Handler引起的内存泄露。
    解决方案:将Handler声明为静态内部类,就不会持有外部类Activity的引用,其生命周期就和外部类无关,如果Handler里面需要context的话,可以通过WeakReference引用方式引用外部类。
    另一种方式可以在UI退出之前,执行remove Handler消息队列中的消息与runnable对象。
  2. 单例模式引起的内存泄漏。
    解决方案:Context是ApplicationContext,由于ApplicationContext的生命周期是和app一致的,不会导致内存泄漏。
  3. 非静态内部类创建静态实例引起的内存泄漏。
    解决方案:把内部类修改为静态的就可以避免内存泄漏。
  4. 注册/反注册未成对使用引起的内存泄漏。
    解决方案:注册广播接受器、EventBus等,记得解绑注销。
  5. 资源对象没有关闭引起的内存泄漏。
    解决方案:资源不使用的时候,记得调用相应的类似 游标close()、destroy()、recycler()、release()等方法释放。
  6. 集合对象没有及时清理引起的内存泄漏。
    解决方案:当不使用的时候一定要记得及时清理集合,让相关对象不再被引用。
  7. WebView 存在着内存泄漏的问题。
    解决方案:把WebView放在一个容器里,在UI退出之前即时释放它。

查看内存的工具:

LeackCanary: 谷歌提供 内存泄露
Memory Monitor 可以很好地监控系统或应用的内存使用情况.
Heap Viewer: Heap Viewer 的功能是查看不同数据类型在内存中的使用情况,可以看到当前进程中的 Heap Size 的情况,分别有哪些类型的数据,以及各种类型数据占比情况。
Allocation Tracker: Memory Monitor 和 Heap Viewer 都可以很直观且实时地监控内存使用情况,还能发现内存问题,但发现内存问题后不能再进一步找到原因,或者发现一块异常内存,但不能区别是否正常,同时在发现问题后,也不能定位到具体的类和方法。
Memory Analyzer Tool(MAT): MAT 是一个快速,功能丰富的 Java Heap 分析工具,通过分析 Java 进程的内存快照 HPROF 分析,从众多的对象中分析,快速计算出在内存中对象占用的大小,查看哪些对象不能被垃圾收集器回收,并可以通过视图直观地查看可能造成这种结果的对象。

参考:
android APP性能优化总结
Android性能全面分析与优化方案研究—几乎是史上最全最实用的

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

相关推荐

泰克示波器TDS210改装便携示波器

泰克示波器TDS210改装编写示波器

超级网吧的博客 3080

Android:最全面&详细的性能优化攻略(含内存优化、内存泄漏、绘制优化、布局优化、图片优化、APK优化、多线程优化、列表优化等)

前言:佛教中有一句话:初学者的心态,拥有初学者心态是件了不起的事情。真正的大师永远怀有一颗学徒的心。 一、概述 在Android中,性能优化非常重要,因为这决定这一个APP的质量好坏,一个更快更稳更省的app能给用户更优秀的体验。 更快:App流畅不卡顿,快速响应; 更稳:App稳定运行,程序不崩溃(Crash)和无响应(ANR); 更省:节省资...

https://juejin.cn/user/1654096907477549/posts 1万+

Blender学习笔记——制作向量场

#下载Blender - UE4 - FGA Vector Field Editor插件的压缩包,Github上的下载地址如下:https://github.com/isathar/Blender_UE4_VectorFieldEditor #下载并解压后将FGA VectorFields文件夹复制到C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\addons目录下,此步骤可根据blender安装的位置自行调整,只要放入addon

wychao2020的博客 1725

Android性能优化系列:内存优化

实践App内存优化:如何有序地做内存分析与优化

Vincent的博客 7496

交通小白首投TRB就中Oral?我的完整时间线与避坑指南(附Editorial Manager实操截图)

本文详细解析了交通领域新手如何高效完成TRB国际会议投稿的全流程,从选题策略到投稿系统实操,再到评审过程解析和常见误区避坑指南。特别针对初次投稿者提供了实用建议,包括时间规划、选题考量、Editorial Manager系统操作技巧,以及如何应对评审意见。文章还分享了从录用到会议参与的关键步骤,帮助研究者提升投稿成功率。

weixin_27303545的博客 388

【PCL 特征】积分图法线估计

本文介绍了基于积分图的有序点云法线估计方法。通过利用点云数据的行列式结构特性,该方法避免了传统KD树搜索,采用积分图将邻域统计运算复杂度从O(k²)降至O(1)。详细阐述了四种法线估计算法:协方差矩阵法(精度最高)、平均3D梯度法(实时性好)、平均深度变化法(适合SLAM)和简单3D梯度法(速度最快)。重点分析了积分图构建、动态窗口平滑处理、法线方向调整等关键技术,并提供了PCL实现代码示例。实验表明,不同方法在精度和速度上存在显著差异,可根据具体应用场景选择合适算法。

yijiujiusan的博客 277

Android内存泄漏&leakcanary2.7

内存泄漏,是指一些对象已经不再需要,但是无法成功被gc回收,导致这部分内存无法释放,造成资源的浪费。当大量的内存泄漏堆积时,严重时还容易间接引发OOM。

BC工坊 3950

Codex 实战 Skills:用 Skill 自动识别并提取 PDF/图片表格数据,效率提升 10 倍

本文介绍如何构建一个多模态文件解析 Skill,用于自动识别和提取 PDF/图片中的表格数据,提升 AI 智能体处理非结构化文档的效率。文章分析了传统方法的局限性,提出分层解析架构(预处理、检测、提取推理、后处理),推荐技术栈包括 pdfplumber、OpenCV 和多模态大模型。详细说明了 Skill 的元数据定义、数据模型设计(使用 Pydantic)和核心实现流程,通过混合策略实现从复杂文档到结构化 JSON/Markdown 的转换,使 AI 代理具备"阅读"多模态文档的能力。

yueyeguzhuo的专栏 308

Android性能优化-内存优化

避免在onDraw方法里面执行对象的创建,onDraw界面,图像,view有变动,则会重新执行onDraw,如果在里面进行对象创建,则会影响绘制时间,如果onDraw绘制时间较长,则会引起UI卡顿,且onDraw频繁执行,创建也会频繁执行;典型例子:在一个activity中有一个比较耗时的线程,当推出activity时,线程依然在执行,无法回收内存,导致了内存泄漏;onTrimMemory()回调方法,及时释放不需要的内存,减小app占用内存,减少系统清理app的可能性。因为是多任务系统,需要协作运行。

qq_34358193的博客 2203

Python 爬虫进阶:爬取 APP 数据(Charles 抓包 + Requests)

本文详细介绍了APP数据爬取的完整技术方案。首先通过Charles抓包工具配置HTTPS代理和证书,解析APP通信协议;然后分析请求参数、反爬机制和动态签名生成规则;接着使用Python的Requests库实现模拟请求、分页爬取和数据存储;最后针对证书问题、Token失效等常见问题提供解决方案。文章强调抓包分析、参数逆向和请求模拟三大核心技术,同时提醒开发者需遵守法律法规,合理控制爬取频率。该方案适用于移动端数据采集场景,为无法直接获取网页数据的情况提供了有效解决方案。

2503_91057718的博客 2120

【华为OD机试真题】458、堆内存申请 | 机试真题+思路参考+代码解析(CD卷)(C++、Java、Py)

题目描述 >有一个总空间为100字节的堆,现要从中新申请一块内存,内存分配原则为优先紧接着前一块已使用内存分配空间足够且最接近申请大小的空闲内存。

KJ.JK 1万+

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

前言 这是我写的性能优化的第三篇文章,下面是另外两篇文章: 玩安卓必须要掌握的性能优化之内存泄漏 玩安卓必须要掌握的性能优化之APK极限压缩 正文 本篇文章准备详细说一下编码中需要注意的地方,养成良好的编码习惯。 第一点 数据类型 尽量不要使用比需求更占空间的基本数据类型,比如能用 int 就不使用 long,能用 float 就不使用 double,可以减少内存的开销,虽然几乎对程...

Zhujiang 1121

VTK 显示大量点云数据及交互(点云拾取、着色、测量等)功能

VTK (Visualization Toolkit) 是一个强大的开源可视化库,非常适合处理点云数据。下面将介绍如何使用 VTK 显示大量点云数据,并实现点云拾取、着色、测量等功能。

深之JohnChen的专栏 1997

Android性能优化之内存分析

内存抖动就是不停的在新生代创建对象,创建对象很多,会有空间分配担保,新生代空间比较小占1/3,老年代2/3,当新生代空间不够时,老年代会腾挪一部分空间给新生代,导致老年代空间下降,这个时候假设创建了大对象,从新生代经过了from到to,年龄足够到了老年代,这个时候空间不够,如果没有连续的空间,就会导致OOM。GC过程中会暂停用户线程包括UI线程,Stop the World,频繁的创建,释放对象,GC频繁出现,就会导致App整体卡顿。引用计数法:一个对象身上没有引用,不可用,这个对象就会被回收。

ChenYiRan123456的博客 979

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

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

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

weitao_666的博客 1361

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android开发者必知的内存、性能优化细节,2024年是做安卓开发人员的绝佳时机

process后面需要记住要有个":",这表示该进程属于你的app。一般情况下,一块基本的空进程需要的内存大小在1.4m左右。

2401_84150154的博客 695

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

安卓性能优化——内存管理技巧

引用了大量API文档的内容,没有对超链接进行删改,有需要的朋友可以直接点超链接访问API文档。 安卓性能优化 Performance and power Implementing a cool idea is a great start toward an app that delights users, but it's just the beginning. The next step...

旧日灯塔 1109

Android内存优化&Android性能优化

资料 Android性能优化:这是一份全面&详细的内存优化指南

AdrianAndroid的专栏 880

Android性能优化解析-内存抖动 附:《Android性能优化指南》

从「内存抖动」说起 面试官:你做过性能优化是吧。 面试者:嗯是的,在卡顿和耗电问题上做过挺多事。 面试官:内存抖动的解决方案你有了解过吗? 面试者:内存什么? 面试官:内存抖动。没有听过吗? 面试者:……没有。 面试官:呼(摇头)。年轻人还是要敬畏技术啊,要持续学习啊。 面试者:我……嗯…… 什么是内存抖动? 在程序里,每创建一个对象,就会有一块内存分配给它;每分配一块内存,程序的可用内存也就少一块;当程序被占用的内存达到一定临界程度,GC 也就是垃圾回收器(Garbage Collector)就会出

datian1234的博客 657

Android性能优化:从内存到电量

本文从内存管理和电量消耗两个方面,详细阐述了Android性能优化的方法。通过检测和修复内存泄漏、优化内存复用与缓存、监测和评估电量消耗、采用电量节省策略等手段,可以有效提升应用的性能和用户体验。在实际开发过程中,开发者应关注这些优化方法,并根据具体场景灵活运用。在未来,Android性能优化将继续是开发者关注的焦点,期待更多高效、实用的优化技术出现。持续关注性能优化工具:随着技术的发展,性能优化工具也在不断更新,开发者应关注并使用最新的工具。深入研究性能优化技术。

2501_92487231的博客 423

安卓应用性能优化的深度探索:从内存管理到布局优化

内存泄漏是指应用中已经不再使用的对象,由于某些原因仍然被其他对象持有引用,导致这些对象无法被垃圾回收器回收,从而占用内存空间。随着内存泄漏的积累,应用的可用内存逐渐减少,最终可能导致应用崩溃或性能严重下降。例如,一个 Activity 持有一个静态变量的引用,而该静态变量的生命周期比 Activity 长,当 Activity 销毁时,由于静态变量仍然引用着 Activity 中的对象,这些对象无法被回收,就造成了内存泄漏。在自定义 View 的开发过程中,应尽量简化绘制逻辑。

数字魔方操控师的博客 1830

android 内存和性能优化汇总

1、即时编译(Just-in-time Compilation,JIT),又称动态转译(Dynamic Translation),是一种通过在运行时将字节码翻译为机器码,从而改善字节码编译语言性能的技术。即时编译前期的两个运行时理论是字节码编译和动态编译。Android原来Dalvik虚拟机是作为一种解释器实现,新版(Android2.2+)将换成JIT编译器实现。性能测试显示,在多项测试中新版本

Coder_android 1597

Android性能优化:内存与CPU

本文从内存和CPU两个方面详细阐述了Android性能优化的策略。通过减少内存占用、提高内存回收效率、减少CPU占用、提高CPU执行效率以及结合内存与CPU优化等方面,可以提高Android应用的性能,提升用户体验。在开发过程中,开发者需要关注内存与CPU的优化,以达到最佳的性能表现。深入研究Android系统架构,了解内存与CPU的工作原理。学习并应用最新的性能优化技术和工具。关注业界最佳实践,不断积累经验,提高优化能力。

2501_92487360的博客 449

Android性能优化整理——布局、内存、网络优化等

Android性能优化 由于手机硬件的限制,内存和CPU都无法像pc一样具有超大的内存,Android手机上,过多的使用内存,会容易导致oom,过多的使用CPU资源,会导致手机卡顿,甚至导致anr。主要是从一下几部分进行优化: 布局优化,绘制优化,内存泄漏优化,响应速度优化,listview优化,bitmap优化,线程优化 布局优化 工具 hierarchyviewer,解决方式: 1、删除无用的空间和层级。 2、选择性能较低的viewgroup,如Relativelayout,如果可以选择Re

QLHepburn的博客 352
上一篇: Android性能优化之UI重绘卡顿
下一篇: android之性能优化之包大小优化
jhonjson
博客等级 码龄11年 220粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值