前一段时间接手了一个新的项目,看友盟后台有好多OOM,而且滑动起来也很不流畅。我便对此产生了好奇。花了一段时间把内存这个彻彻底底的研究了一下,在此总结一下怎么样才能把app的内存占用降低下去。
题外话:推荐一个非常好用的开源项目 leakcanary只要加短短两句话,内存泄露非常直白就被展现出来了。
内存溢出基本上大部分都是内存泄露导致的,泄露泄露泄露最后超出最大内存限制然后就OOM了,下面介绍两个快速缓解(注意是缓解)OOM的办法:
1、 当然如果你的app确实需要展示很多图片,那么建议你在Manifest中加入Android:largeHeap=true , 那么你的程序在3.0以后就可以使用256兆内存(并不推荐用这个方法解决oom问题,但是这个却是最快的)。
2、 ImageLoader RGB_565 要比 RGB_8888 省好多好多的内存...不了解的可以百度一下(同时建议用glide替换Imageloader,好处有很多,例如绑定生命周期之类云云)。
**可能造成项目内存泄露的地方: **
- 1 WebView内存泄露 (xml中注册)
- 2 Dialog 内存泄露 (横竖屏切换)
- 3 数据库操作 (游标,事务等)
- 4 bitmap 没释放 (Native 操作bitmap)
- 5 handler 内存泄露 (Activity 被关闭)
- 6 单例持有Activity对象导致内存泄露 (会阻止被回收)
- 7 广播没有unregister (之类需要解绑操作的)
- 8 File 输入输出流操作 (注意加 finally)
- 9 没有缓存 convertView (越滑越卡)
这些就是可能造成内存泄露最终导致内存溢出的地方,以后会慢慢补充,关于下列两点我后续会继续po文章讲解决办法:
- WebView内存泄露以及解决办法。
- handler内存泄露的原因以及解决办法。
网友评论