`
smallsmile
  • 浏览: 136222 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

(转)内存溢出的解决办法 Android

阅读更多

(转)内存溢出的解决办法 Android

昨天在模拟器上给gallery放入图片的时候,出现java.lang.OutOfMemoryError: bitmap size exceeds VM budget 异常,图像大小超过了RAM内存。
      模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。由于每张图片先前是压缩的情况。放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下:

//解决加载图片 内存溢出的问题
                    //Options 只保存图片尺寸大小,不保存图片到内存
                BitmapFactory.Options opts = new BitmapFactory.Options();
                //缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰
                opts.inSampleSize = 4;
                Bitmap bmp = null;
                bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],opts);                              
                ...               
               //回收
                bmp.recycle();

通过上面的方式解决了,但是这并不是最完美的解决方式。

通过一些了解,得知如下:

优化Dalvik虚拟机的堆内存分配

对于Android平台来说,其托管层使用的Dalvik Java VM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用 dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体 原理我们可以参考开源工程,这里我们仅说下使用方法:   private final static float TARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用 VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION); 即可。 

Android堆内存也可自己定义大小

    对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对 性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的 dalvik.system.VMRuntime类来设置最小堆内存为例:

private final static int CWJ_HEAP_SIZE = 6* 1024* 1024 ;

VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理
分享到:
评论

相关推荐

    android加载大量图片内存溢出的三种解决办法

    android加载大量图片内存溢出的三种解决办法

    图片过大引起的内存溢出解决方案

    ### 图片过大引起的内存溢出解决方案 在Android开发过程中,我们经常会遇到因加载大尺寸图片而引发的`OutOfMemoryError`(内存溢出错误)。这种问题通常发生在使用`BitmapFactory`来加载图片时,尤其是在资源有限的...

    Android webview 内存泄露的解决方法

    Android webview 内存泄露的解决方法 最近在activity嵌套webview显示大量图文发现APP内存一直在涨,没法释放内存,查了很多资料,大概是webview的一个BUG,引用了activity导致内存泄漏,所以就尝试传递...

    Android 内存溢出的一些解决办法.doc

    本文将详细探讨几种解决Android内存溢出的方法。 首先,针对图像导致的内存溢出,一种常见的解决方案是使用`BitmapFactory.Options`类进行图片解码时的尺寸控制。例如,在创建`Bitmap`对象时,可以设置`...

    Android的内存机制和溢出说明

    内存溢出(OutOfMemoryError)是Android开发中常见的问题,特别是在处理大尺寸的位图(Bitmap)时。由于Android设备的内存有限,长时间持有资源的引用会导致内存无法被回收,从而引发内存泄露。内存泄露不仅浪费资源...

    Android应用源码之防止内存溢出浅析.zip

    内存溢出(Out Of Memory,简称OOM)是Android开发者经常面临的问题,它会导致应用崩溃,严重影响用户体验。本资源"Android应用源码之防止内存溢出浅析"旨在深入探讨如何通过源码分析来避免这种问题。 一、Android...

    5个Android开发中比较常见的内存泄漏问题及解决办法

    下面搜罗了5个Android开发中比较常见的内存泄漏问题及解决办法,分享给大家,一起来看看吧。  一、单例造成的内存泄漏 android的单列大家都喜欢使用。但单例模式的静态特征使得他的生命周期和应用的生命周期一样长...

    Android内存研究

    十二、OOM 及解决办法1)合理使用 Bitmap:压缩图片、使用内存缓存、避免大图直接加载到内存。 2)避免内存泄露:定期检查并修复潜在的内存泄露问题。 3)优化数据结构:减少不必要的对象创建,使用合适的数据结构。 4)...

    Android内存管理

    **2.5 内存溢出的解决办法** 当遇到内存溢出问题时,可以尝试以下方法: - **优化图像资源**: 对图像资源进行优化,减少内存消耗。 - **调整Dalvik堆大小**: 可以通过调整Dalvik堆的大小来增加可用内存。 - **...

    android开发如何做好内存优化.doc

    - 对于图片资源,使用像Glide或Picasso这样的库进行加载和缓存管理,防止内存溢出。 - 根据屏幕尺寸和设备密度加载适当大小的图片,避免加载过大的图片导致内存压力。 10. 对象池和复用策略: - 对于频繁创建和...

    详解Android使用Handler造成内存泄露的分析及解决方法

    内存泄露的危害就是会使虚拟机占用内存过高,导致 OOM(内存溢出),程序出错。对于 Android 应用来说,就是你的用户打开一个 Activity,使用完之后关闭它,内存泄露;又打开,又关闭,又泄露;几次之后,程序占用...

    android 图像异步处理

    在处理远程图片时,既要考虑到网络流量的节省,又要保证加载速度,同时防止因图片处理不当导致的内存溢出(OOM)问题。以下是对Android客户端图像异步处理的详细解释: 1. **异步下载**: - 在Android应用中,由于...

    ANDROID 开发文档.pdf

    - **概述**:解决Bitmap对象操作过程中可能出现的内存溢出等问题。 - **应用场景**:优化图像处理性能。 **11. ANDROID状态条永不消失的处理方法** - **概述**:确保状态栏始终可见,不会因为特定操作而隐藏。 - **...

    加载大图片、内存缓存、diskCache

    解决办法是在Adapter的`getView()`方法中,确保在显示新图片前清除旧的Bitmap,可以使用`imageView.setImageBitmap(null)`来实现。 最后,本地缓存图片通常使用diskCache,即磁盘缓存。Android提供了`DiskLruCache`...

    Android-Universal-Image-Loader-1.9.5

    2. **利用软引用**:避免内存溢出,使用软引用存储图片对象。 3. **优化图片源**:减小图片尺寸、压缩质量,减轻服务器和客户端的压力。 4. **使用异步加载策略**:确保用户在等待期间能有反馈。 六、常见问题及...

    Android 通过Intent调用系统拍照程序出现图片太小的问题解决办法

    "Android 通过Intent调用系统拍照程序出现图片太小的问题解决办法" Android 通过Intent调用系统拍照程序出现图片太小的问题解决办法是 Android 开发中常见的问题之一。这个问题的出现是因为当我们通过Intent调用...

    Android中Memory Leak原因分析及解决办法

    在Android开发过程中,我们经常碰到的情况就是在我们不清楚为什么情况下,程序突然出现Crash了。其中有一类日志相信...影响:Android系统能够为每个应用程序分配的内存是有限的,当一个应用程序中产生的内存泄露过多

    2024-Android高级面试题

    - **内存溢出**:应用消耗过多内存导致系统回收资源。 - **错误处理不当**:例如空指针异常未妥善处理。 - **栈溢出**:方法调用层次过深导致栈溢出。 - **解决办法**: - **内存管理**:合理规划内存使用,及时...

Global site tag (gtag.js) - Google Analytics