今天,咱们来讲讲内存泄漏,想必大家都可能在搬砖的过程中遇到过内存泄漏的问题。那么今天咱们就一探究竟。
目录
什么是内存泄漏?
内存泄漏:指的是在申请内存后,当该内存不需要再使用但是还无法被释放。
内存溢出:程勋运行所需的内存超过系统分配的内存,即OOM
注意:在这里很多小伙伴都会把内存泄漏和内存溢出以为是一个东西,但是!!!注意区分它俩之间的区别
内存抖动:频繁创建大量的、临时的小对象
内存 泄漏的现象:
1.在单例中需要传入content,但是传入的是Activity的Content,application上下文
2.在Java中内部类会隐式持有外部类的引用,如果内部类执行了耗时操作。就可能产生内存泄漏
3.在咱们使用IO、file流等资源时要及时关闭
4.其实动画也是一个耗时任务,Activity启动属性动画,如果在销毁的时候没有调用cancle方法,可能我们看不到动画了,但是他还是会在后台播放,动画引用所在的控件,控件引用Activity,这样就造成了Activity无法正常释放。
检测内存泄漏的工具:
1.Memory和Profiler:Android Studio自带的内存分析器,实时跟踪内存分配
2.MAT是eclipse的内存分析器
3.LeakCanary检测内存泄漏
如何优化内存泄漏?
1.关闭无用的Service
2.注册监听,服务,广播页面销毁的时候记得解除注册
3.Handle页面销毁的时候removeAllMessageCallBack()
4.使用webview的时候多开一个进程运行,让持有webview的Activity独立运行在一个进程,在Activity的onestory()中关闭这个进程
5.Bitmap是大头:使用RGB_565解码图片/图片压缩/不要乱放图片