内存泄露
大部分的内存问题都是内存泄露导致的,Android里也有一些很常见的内存泄露问题这里简单罗列下:
详细见https://www.jianshu.com/p/c270148e993b
单例(主要原因还是因为一般情况下单例都是全局的,有时候会引用一些实际生命周期比较短的变量,导致其无法释放)
静态变量(同样也是因为生命周期比较长)
Handler内存泄露[7]
匿名内部类(匿名内部类会引用外部类,导致无法释放,比如各种回调)
资源使用完未关闭BraodcastReceiver,ContentObserver,File,Cursor,Stream,Bitmap
对Android内存泄露业界已经有很多优秀的组件其中LeakCanary最为知名(Square出品),其原理是监控每个activity,在activity ondestory后,在后台线程检测引用,然后过一段时间进行gc,gc后如果引用还在,那么dump出内存堆栈,并解析进行可视化显示。使用LeakCanary可以快速地检测出Android中的内存泄露。
正常情况下,解决大部分内存泄露问题后,App稳定性应该会有很大提升,但是有时候App本身就是有一些比较耗内存的功能,比如直播,视频播放,音乐播放,那么我们还有什么能做的可以降低内存使用,减少OOM呢?
1. 首先是解决大部分内存泄露。LeakCanary工具
LeakCanary使用详解见:
https://blog.csdn.net/itachi85/article/details/77826112?utm_source=gold_browser_extension
Android 内存优化总结&实践2. 通过MAT查看内存占用,优化占用内存较大的地方。
详细见:http://liuwangshu.cn/application/performance/ram-5-mat.html
Android 内存优化总结&实践
网友评论