内存,是Android应用的生命线,一旦在内存上出现问题,轻者内存泄漏,重者直接crash,因此一个应用保持健壮,内存这块的工作是持久战,而且从写代码这块就需要注意合理性,所以想要了解内存优化如何去做,要先从基础知识开始。
在开始之前需要先搞明白一个问题,为什么要做内存优化?或者说做内存优化的目的是什么?
为什么要做内存优化?
我们知道,手机的内存是有限的,如果应用内存占用过大,轻则引起卡顿,重则导致应用崩溃或被系统强制杀掉,更严重的情况下会影响应用的留存率。因此,内存优化是性能优化中非常重要的一部分。
目的
做内存优化的目的是降低 Crash 率、让应用运行更流畅、让应用存活时间更长。
Crash 率
Android应用崩溃的原因有很多,内存优化可以帮助我们的应用避免内存问题导致的崩溃内存问题导致崩溃的具体表现就是内存溢出导致的异常OOMOOM的原因有很多,后面会更详细的介绍。
运行更流畅
Android出现界面卡顿的原因有很多,内存问题是其中一个原因内存问题会因为垃圾回收影响界面流畅度(垃圾收集)在GC中,所有线程都应该停止,包括主线程当GC和画图接口操作同时触发时,画图执行会被搁置,导致丢帧,即接口卡住。
存活时间长
Android会根据特定的机制清理进程清理进程时,优先清理后台进程如果某个应用程序在后台运行并占用更多内存,它将首先被清理清理进程的机制是低杀,后面会更详细的介绍。如果用户小张想在我们的电子商务应用程序中购买一个产品,并且在煞费苦心之后找到了一个他喜欢的产品,当他准备购买时,小张 的妻子让他给孩子换尿布当小张再次打开应用时,发现产品页面已经关闭,也就是应用被干掉了,这时小张又想起了孩子的奶粉钱,可能就放弃这次购买了。
用户在移动设备上使用应用的过程中被打断是很常见的,如果我们的应用不能活到用户回来的时候,要用户再次进行操作的体验就会很差。
优化工具
Memory Profiler
Memoryprofiler是Androidstudio自带的一个内存检测工具它通过实时图表显示内存信息,可以识别内存泄漏内存抖动等现象,并可以转储捕获的内存信息、能够执行垃圾收集并跟踪内存分配。
Memory Analyzer (MAT)
比Memory Profiler更强大的Java Heap分析工具,可以准确查找内存泄露以及内存占用情况,还可以生成整体报告,用来分析问题等。
MAT一般用来线下结合Memory Profiler分析问题使用,Memory Profiler可以直观看出内存抖动,然后生成的hdprof文件,通过MAT深入分析及定位内存泄露问题。