55、Android 内存溢出

一、内存溢出定义

系统为每一个应用程序分配了不同的内存上限,如果超过这个上限被视为内存溢出,从而被kill掉。

二、内存溢出原因

1、内存泄漏导致
2、加载资源对象过大

三、内存溢出解决方法

1、减小对象的内存占用

  1. 使用更加轻量的数据结构
  2. 避免在Android里面使用Enum
  3. 减小Bitmap对象的内存占用
  4. 使用更小的图片

2、内存对象的重复利用

  1. 复用系统自带的资源
  2. 注意在ListView/GridView等出现大量重复子组件的视图里面对ConvertView的复用
  3. Bitmap对象的复用
  4. 避免在onDraw方法里面执行对象的创建
  5. StringBuilder

3、避免对象的内存泄露

  1. 注意Activity的泄漏
  2. 考虑使用Application Context而不是Activity Context
  3. 注意临时Bitmap对象的及时回收
  4. 注意监听器的注销
  5. 注意缓存容器中的对象泄漏
  6. 注意WebView的泄漏
  7. 注意Cursor对象是否及时关闭

4、内存使用策略优化

  1. 谨慎使用large heap
  2. 综合考虑设备内存阈值与其他因素设计合适的缓存大小
  3. onLowMemory()与onTrimMemory()
  4. 资源文件需要选择合适的文件夹进行存放
  5. Try catch某些大内存分配的操作
  6. 谨慎使用static对象
  7. 特别留意单例对象中不合理的持有
  8. 珍惜Services资源
  9. 优化布局层次,减少内存消耗

参考:
http://hukai.me/android-performance-oom/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值