java轻易不会发生内存泄露_LeakCanary傻瓜式的内存泄露检测工具

LeakCanary傻瓜式的内存泄露检测工具

在Android开发过程中如果需要处理图片或者大量数据的时候,常常会遇到OOM(http://www.doczj.com/doc/34652dc30912a216147929fb.htmlng.OutOfMemoryError),一般出现最多的是在创建Bitmap上,也有可能是在内存中处理了大量的数据造成。

一般会针对Bitamp做下面几种的优化:

1. 增加进程的内存

2. 使用Bitmap.Config.ALPHA_8(图片失真)

3. 显示的调用System.gc()

4. catch Exception

5. 调用bitmap.recycle()

6. 缩小bitmap的大小(如果是读取的原图是一个大图应该先采用这种方式,Bitmap如果是刚好适配屏幕的就不需要缩小了)

7. 使用弱引用和软引用(google已经不建议使用了,Android的GC效率非常高,只要保证对象没有被引用即可)

但是我们会忽略掉一个问题就是什么造成了OOM?一般都发生OOM崩溃的地方都不一定是内存泄露的地方,崩溃了的原因可能Activity造成的内存泄露,也可能是操作数据库造成的内存泄露,当内存已经非常接近峰值的时候,这个时候恰巧要创建一个Bitmap对象就会发生OOM(Bitmap对象占用的内存空间比较大)。

内存泄露

每个对象都有自己的生命周期,Activity会调用onDestroy做销毁处理,但是如果使用Activity的Context调用Toast,就会把这个Activity的引用传给了Toast,而Toast的生命周期不会随着Activity的销毁而销毁,这样就造成了Activity的内存泄露,因为它被Toast引用着。

常见的内存泄露形成的原因:

1. Toast持有Activity的引用

2. 数据库游标Cursor没有关闭

3. Adapter没有复用convertView

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值