记录分享一下周末的学习总结---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(内存泄漏、内存抖动、应用卡顿等)
网友评论