目录
动态存健分面数动态开路的空间,在使用完生后未释故货果是教 真点提该内存单元。真到程序绩来。即所這的内存型通,肉存世漫是道应用程序00M(内存溢出)的主要原因之一!
单列模式引发的内存泄温:
单例模式里的静态实例持有对象的引用,导致对象无法被回收,常见为持有Activity的引用优化:改为持有Application的引用,或者不持有使用的时侯传递。
集合操作不当引发的内存泄漏 集合只增不派
线程的操作不当引发的内存泄漏:
线程持有对象的引用在后台执行,与对象的生命周期不一致。修改为静态实例+弱引用(Weakrefrence)方式,使其生命周期一致
匿名内部类/非静态内部类操作不当引发的内存泄漏:
内部类持有对象引用,导致无法释放. 比如各种回调。应当保持生命周期一致,改为静态实例+对象的弱引用方式(WeakReference)
常用的资源未关闭回收引发的内存泄漏:
BraodcastReceiver, File, Cursor. IO流,Bitmap等资源使用末关闭
Handler使用不当造成的内存泄漏:
Handler持有Activity的引用, 其发送的Message中持有Handler的引用,当队列处理Message的时间过长会导致Handler无法下一篇优化:静态实例+弱引用(Weakrefrence)方式销毁对象时候清空队列里的Message
注册对象未被反注册
内存滋出是指虚拟机内存耗尽,无法为新对象分配内存,导 #致引用崩渍。典型的情况为加载多张大图,导致内存耗尽。
1.调整图像大小后再放入内存、及时回收
2.不要过多的创建静态变量
1布局优化不要嵌套布局 不需要显示的布局要gone这样就不会绘制
2列表及adapter优化滑动停止再加载图片
3背景和图片等内存分配优化
4避免ANR
5当service完成后,尽量关闭它
6在UI不可见的时候, 释放掉一些只有U使用的资源
7在系统内存紧张的时候, 尽可能多的释放掉一些非重要资源
8避免滥用Bitmap导致的内存泄#
9使用针对内存优化的数据容器
10避免使用依赖注入的框架
11避免静态变量和单例的溢用