android bitmap outOfMemory解决方法



在Android开发中,Bitmap对象是用于处理图像的主要类,但如果不正确管理,它可能导致应用程序运行时出现`OutOfMemoryError`。这是因为Bitmap占用大量的内存,尤其是当加载大尺寸或高分辨率图片时。这个问题在低内存设备上尤为突出。本文将深入探讨Android Bitmap导致的`OutOfMemoryError`问题,以及如何有效地解决这个问题。 我们需要了解`OutOfMemoryError`是如何产生的。在Java(包括Android)中,每个应用都有一定的内存限制。当应用尝试分配的内存超过其可用的堆内存时,就会抛出此错误。Bitmap对象是直接存储在堆内存中的,因此大量或者大尺寸的Bitmap会迅速消耗掉内存。 解决`OutOfMemoryError`通常涉及以下几个策略: 1. **合理选择Bitmap的配置**:可以通过调整Bitmap的位深度(颜色格式)和密度(Density-independent Pixels, dp)来降低内存占用。例如,使用ARGB_8888格式(每个像素4字节)相比RGB_565(每个像素2字节)会占用更多内存,但颜色表现更好。根据应用需求选择合适的格式可以有效减小内存压力。 2. **使用inSampleSize**:通过设置`BitmapFactory.Options.inSampleSize`,可以在解码图片时降低其尺寸,从而减少内存消耗。例如,如果原始图片是1024x1024,设置`inSampleSize`为2,得到的就是512x512的图片,内存占用减半。 3. **延迟加载与按需加载**:不要一次性加载所有图片,而是根据需要逐个加载。例如,只在图片需要显示时才进行解码,或者在滚动列表时只加载当前视图范围内的图片。 4. **使用LruCache或 Fresco、 Glide等图片库**:Android提供了`LruCache`类,可以帮助实现图片缓存,避免频繁地创建和销毁Bitmap。此外,第三方库如Fresco和Glide,它们内部有优化的内存管理和图片缓存机制,可以更高效地处理Bitmap。 5. **及时释放资源**:当Bitmap不再需要时,应调用`recycle()`方法释放系统资源,但需要注意这并不意味着内存立即释放,只是标记为可回收。同时,确保从视图中移除Bitmap引用,防止内存泄漏。 6. **使用SoftReference或WeakReference**:使用这两种引用类型可以降低Bitmap的内存保留优先级,使系统在内存紧张时更容易回收Bitmap。 7. **监控内存使用**:利用Android的`ActivityManager`或第三方工具如MAT(Memory Analyzer Tool),可以分析应用的内存使用情况,找出内存泄漏和不必要的内存占用。 通过以上方法,开发者可以有效地管理和控制Bitmap的内存使用,减少`OutOfMemoryError`的发生。然而,需要注意的是,过度依赖内存压缩和回收也可能影响图片的质量和用户体验,因此在优化过程中要找到性能和质量的平衡点。





























- huoshaoli2014-05-12不知道怎么说,没用
- Wing丶Chu2014-09-06参考参考,还是没有解决我的问题。

- 粉丝: 0
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 基于技能的启发式网络课程设计的论文-教育理论论文.docx
- 新时代信息化背景下农村幼儿家庭教育的困惑及策论研究.docx
- 对网络流行构式语暴风式+X的简要分析.docx
- 全云化Devops研发实践.pptx
- 浅议项目管理产学研结合工作.docx
- 单片机函数信号发生器方案设计书.doc
- WebGIS考试复习题.ppt
- 四川定额MicrosoftExcel工作表.xls
- 《网络信息安全管理分析》.doc
- 四层电梯模型PLC控制系统设计方案.doc
- 基于PLC控制机械手研究设计.doc
- IP网络访问控制列表介绍.pptx
- 数控铣床和加工中心及编程.ppt
- XX医院网络项目设计实施方案.doc
- 计算机图像识别智能化处理技术的分析.docx
- 大数据环境下云存储平台安全机制研究.docx


