最近在写程序的时候图片加载老是报出内存溢出的错误,表示很是头痛。网上找了些文章看了看。今天就大致的总结下。可以先去看下这篇文章 http://www.2cto.com/kf/201208/148379.html 很是详细。
大致就用到了java 软引用的概念,图片处理,java回收机制三种方法合力解决了OOM的问题。随然知道了方法但在调试的时候还是费了不少时间。
我加载图片的代码大多数都是在自定义的适配器中,所以我选择把内存处理的方法写在运用适配器的activity中,首先先去加载图片代码如下:
private Bitmap loadBitmapImage(String path) {
if (mImageCache.containsKey(path)) {
SoftReference<Bitmap> softReference = mImageCache.get(path);
Bitmap bitmap = softReference.get();
if (null != bitmap)
return bitmap;
}
Bitmap bitmap = Options.CreatBitMap(path);
mImageCache.put(path, new SoftReference<Bitmap>(bitmap));
return bitmap;
}
可以看出在每次加载图片的时候都会将图片存入一个软引用的缓存数组中,这样做的好处就是,每当你重复调用的时候都会先去这个数组中判断是否有该图片的存在,如果存在就不用去重新读取了,重新引用就好.
然后就是图片释放的问题,首先你要考虑清楚的问题是,图片在什么时候释放,如果方法写错了地方也是不对的这里我写在了onDestroy()方法中
public void releaseImage(String path) {
if (mImageCache.containsKey(path)) {
SoftReference<Bitmap> reference = mImageCache.get(path);
Bitmap bitmap = reference.get();
if (null != bitmap) {
bitmap.recycle();
}
mImageCache.remove(path);
}
}
如果你有更好的经验,请分享
分享到:
相关推荐
在Android开发中,Bitmap对象是用于处理图像的主要工具,但如果不...在Android 2.0版本中关闭硬件加速是一个可行的解决方案,但应权衡性能和内存使用。理解并灵活运用这些方法,可以大大提高应用的稳定性和用户体验。
在提供的Demo_BitmapOOM_Solution中,可能包含了上述部分或全部解决方案的示例代码,可以参考学习如何有效地管理和控制Bitmap内存,防止OOM的发生。通过不断实践和优化,可以确保应用程序在处理图片时更加稳定和高效...
"处理android bitmap oom 2.0版本"是一个针对这个问题的解决方案更新,它旨在修复前一版本中回收Bitmap对象可能导致的问题。 1. **理解Bitmap OOM**: - OOM错误通常发生在Android系统无法为应用分配更多内存时。 ...
总的来说,这个解决方案旨在提供一套实用的方法,帮助开发者有效地管理和优化Bitmap资源,防止Android应用因Bitmap OOM问题而崩溃。通过理解Bitmap的内存管理机制,并结合示例代码进行实践,开发者可以提高应用的...
"博客资源:ViewPager加载大量图片oom解决方案demo" 这个标题表明了这是一个关于解决在Android应用中使用ViewPager展示大量图片时出现内存溢出(Out Of Memory,简称OOM)问题的实例教程。ViewPager是Android SDK中...
Android 加载大图片 OOM 异常解决方案 在 Android 开发中,加载大图片是一个常见的问题,这可能会引发 OOM(Out of Memory)异常。OOM 异常是指应用程序试图分配超过系统可用内存的内存空间,从而导致应用程序崩溃...
一种常见的解决方案是使用第三方库,例如"Android-Universal-Image-Loader"。这个开源项目提供了一个强大的图片加载、缓存框架,能够有效地防止OOM并优化图片显示。 Android-Universal-Image-Loader库的核心功能...
下面将详细介绍如何在Android中防止OOM错误,并通过`BitmapTool`工具类的使用,提供一种解决方案。 1. **理解Android内存管理** - Android为每个应用分配了一定的堆内存,不同设备和API级别有所不同。 - 当应用...
文件"关于Android oom的分析.docx"可能提供了更深入的案例分析和解决方案,建议查阅以获取更详细的信息。总的来说,理解Android内存管理机制并采取有效的内存优化策略,是防止和解决OOM问题的关键。
本文将深入探讨Android内存管理的基础、内存优化策略、Bitmap的使用及管理、内存泄漏的原因和解决方案,以及如何进行内存分析。 首先,了解Android内存管理的基础至关重要。Android系统为每个应用程序分配了一个...
本解决方案旨在探讨如何有效压缩Android中的图片,避免ANR现象,提高用户体验。 首先,理解ANR全称为Application Not Responding,当Android系统检测到主线程被阻塞超过5秒钟时,就会向用户显示ANR对话框。图片加载...
"Android高级应用源码-加载本地图片,绝对不会出现OOM.zip"是一个针对这一问题的解决方案,它包含了如何在Android应用中加载本地图片而不引发内存溢出的示例代码。 首先,我们要理解为什么加载图片会引发OOM。在...
8. **使用Picasso、Glide或 Fresco 图片加载库**:这些第三方库提供了一整套图片加载、缓存和显示解决方案,自动处理Bitmap的压缩和内存管理,简化开发流程。 9. **Bitmap重用**:在某些情况下,可以考虑重用已经...
这个压缩包"安卓图片多选相关-自定义相册实现多选照片解决oom.zip"提供了一个针对这一问题的解决方案。 首先,我们来探讨一下Android中的内存管理。Android系统为每个应用分配一定的内存空间,当应用超过这个限制时...
本文将深入探讨如何实现Android大图片裁剪的终极解决方案,结合提供的资源包`CropImage-Enhance`,我们将涵盖以下几个关键知识点: 1. **Bitmap的加载与内存管理** - Android中的Bitmap对象占用大量内存,处理不当...
传统的解决方案包括图片压缩、使用第三方库如Glide或Picasso,以及在`PagerAdapter`的`destroyItem`方法中手动回收`Bitmap`资源。然而,这些方法在面对大量大图时效果有限,因为它们并未从根本上解决内存管理的问题...
本文将详细探讨如何通过自定义相册来实现多选照片功能,并针对OOM问题提出解决方案。 首先,自定义相册的实现通常需要以下几个关键步骤: 1. **获取系统相册中的图片**:可以使用ContentResolver查询MediaStore中...
一种常见的解决方案是使用异步加载库,如Picasso、Glide或Fresco,它们能够智能地缓存图片,减少内存使用,并在必要时进行图片压缩。这些库能自动处理图片尺寸调整,确保加载到内存中的图片大小适合屏幕显示,从而...
在Android开发中,高效加载大图和多图是至关重要的,因为如果不加以处理,这可能导致程序出现内存溢出(OOM)异常,严重影响用户体验。本文将详细介绍如何有效地避免此类问题。 首先,我们需要理解Android应用程序...
这篇博客“Android 自定义 HorizontalScrollView 打造再多图片(控件)也不怕 OOM 的横向滑动效果”提供了一个解决方案,通过自定义HorizontalScrollView来优化内存管理,防止OOM的发生。 首先,理解Android的内存...