Android内存优化总结–内存泄漏与OOM

时间:2021-6-19 作者:qvyue

记录分享一下周末的学习总结—Android内存优化,总结后续还会完善补充。


内存优化分为:一个本质和三个知识点

本质:对象的引用未被释放,导致对象本身无法被有效的回收。

三个知识点:内存泄漏、内存溢出、内存优化工具

【内存泄漏】

1.单例模式引发的内存泄漏:

原因:单例模式里的静态实例持有对象的引用,导致对象无法被回收,常见为持有Activity的引用

优化:改为持有Application的引用,或者不持有使用的时候传递。

2.集合操作不当引发的内存泄漏:

原因:集合只增不减

优化:有对应的删除或卸载操作

3.线程的操作不当引发的内存泄漏:

原因:线程持有对象的引用在后台执行,与对象的生命周期不一致

优化:静态实例+弱引用(Weakrefrence)方式,使其生命周期一致

4.匿名内部类/非静态内部类操作不当引发的内存泄漏:

原因:内部类持有对象引用,导致无法释放,比如各种回调

优化:保持生命周期一致,改为静态实例+对象的弱引用方式(WeakReference)

5.常用的资源未关闭回收引发的内存泄漏:

原因:BraodcastReceiver,File,Cursor,IO流,Bitmap等资源使用未关闭

优化:使用后有对应的关闭和卸载机制

6.Handler使用不当造成的内存泄漏:

原因:Handler持有Activity的引用,其发送的Message中持有Handler的引用,当队列处理Message的时间过长会导致Handler无法被回收

优化:静态实例+弱引用(Weakrefrence)方式

销毁对象时候清空队列里的Message

【内存溢出】

原因:

1.内存泄漏长时间的积累

2.业务操作使用超大内存

优化:

1.调整图像大小后再放入内存、及时回收

2.不要过多的创建静态变量

【优化工具】

LeakCanary(Activity内存泄漏)

Profiler(内存泄漏、内存抖动、应用卡顿等)

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。