一、内存溢出定义
系统为每一个应用程序分配了不同的内存上限,如果超过这个上限被视为内存溢出,从而被kill掉。
二、内存溢出原因
1、内存泄漏导致
2、加载资源对象过大
三、内存溢出解决方法
1、减小对象的内存占用
- 使用更加轻量的数据结构
- 避免在Android里面使用Enum
- 减小Bitmap对象的内存占用
- 使用更小的图片
2、内存对象的重复利用
- 复用系统自带的资源
- 注意在ListView/GridView等出现大量重复子组件的视图里面对ConvertView的复用
- Bitmap对象的复用
- 避免在onDraw方法里面执行对象的创建
- StringBuilder
3、避免对象的内存泄露
- 注意Activity的泄漏
- 考虑使用Application Context而不是Activity Context
- 注意临时Bitmap对象的及时回收
- 注意监听器的注销
- 注意缓存容器中的对象泄漏
- 注意WebView的泄漏
- 注意Cursor对象是否及时关闭
4、内存使用策略优化
- 谨慎使用large heap
- 综合考虑设备内存阈值与其他因素设计合适的缓存大小
- onLowMemory()与onTrimMemory()
- 资源文件需要选择合适的文件夹进行存放
- Try catch某些大内存分配的操作
- 谨慎使用static对象
- 特别留意单例对象中不合理的持有
- 珍惜Services资源
- 优化布局层次,减少内存消耗