`
bcolaq
  • 浏览: 7978 次
文章分类
社区版块
存档分类
最新评论

Bitmap导致的OOM 终极解决方案

 
阅读更多
1 bitmap如果不用了,回收掉

protected void onDestroy() { 
        super.onDestroy(); 
        if(bmp1 != null){ 
            bmp1.recycle(); 
            bmp1 = null; 
        } 
        if(bmp2 != null){ 
            bmp2.recycle(); 
            bmp2 = null; 
        } 
    } 

2 先算出该bitmap的大小,然后通过调节采样率的方式来规避

BitmapFactory.Options opts = new BitmapFactory.Options(); 
        opts.inJustDecodeBounds = true; 
        BitmapFactory.decodeFile(imageFile, opts); 
        opts.inSampleSize = computeSampleSize(opts, minSideLength, maxNumOfPixels); 
        opts.inJustDecodeBounds = false; 
        try { 
            return BitmapFactory.decodeFile(imageFile, opts); 
        } catch (OutOfMemoryError err) { 
        } 
        return null; 

3 在进行文件传输时,最好采用压缩的方式变成byte[]再传输

public static byte[] bitmap2Bytes(Bitmap bm) { 
        ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
        bm.compress(Bitmap.CompressFormat.JPEG, 90, baos); 
        return baos.toByteArray(); 
    } 
分享到:
评论

相关推荐

    Android裁剪图片终极解决方案

    本文将深入探讨如何实现Android大图片裁剪的终极解决方案,结合提供的资源包`CropImage-Enhance`,我们将涵盖以下几个关键知识点: 1. **Bitmap的加载与内存管理** - Android中的Bitmap对象占用大量内存,处理不当...

    bitmap内存问题

    #### 解决方案 为了有效解决这些问题,我们可以采取以下几种方法: ### 1. 使用适当的压缩比例 通过调整`BitmapFactory.Options`中的`inSampleSize`参数来控制加载的`Bitmap`的大小。这种方式可以显著减少内存...

    基于内存的分布式计算架构.pdf

    **最终解决方案**: 我们选择了基于Ehcache、Redis和Zookeeper构建的分布式缓存计算框架——代号“Blade”。这个框架专注于优化大量bitmap索引的计算和更新,将bitmap索引存储在内存中,减少数据库操作。数据处理...

    ViewPager或ImgeView加载图片出现内存溢出(OOM)

    解决方案:改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source。decodeStream最大的优势在于其直接调用nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap...

    安卓Android源码——防止内存溢出浅析.zip

    5. **源码层面的解决方案**: - 研究Android系统的源码,理解系统如何处理内存分配和回收,以便更好地适配和优化。 - 对于特定的内存泄漏场景,比如Context的使用,可以通过研究源码找到最佳实践。 通过深入学习...

    有关android 內存泄漏的问题

    ### 有关Android内存泄漏的问题及解决方案 #### 一、OOM现象与定义 在Android开发过程中,经常遇到的一个问题是“Out Of Memory”(简称OOM),即内存溢出错误。这种错误通常发生在应用程序尝试分配超出系统允许...

    Android内存溢出及内存泄漏原因进行

    下面我们将详细探讨这两个问题的原因以及相应的解决方案。 内存溢出(OOM)通常发生在应用程序请求的内存超过了系统分配的内存限额。这可能是由于以下几个原因: 1. **内存泄漏过多**:当应用运行过程中不断累积...

    kandroidconf_memory_and_performance.pdf

    文档提供了两个案例研究来帮助理解内存溢出的具体原因及其解决方案: 1. **使用MAT进行快照分析**:通过分析内存快照,找出内存泄漏的根本原因。 2. **使用kandroidMemTracer进行历史分析**:利用工具追踪内存使用的...

    百度校园招聘历年经典面试题汇总:Android岗

    - **解决方案**:使用归并排序或自定义比较器的快速排序算法,避免使用Java自带的排序库。 #### 10. 自定义控件的基本流程 - **创建**:继承View或现有控件。 - **初始化**:在构造函数中初始化属性。 - **绘制**...

Global site tag (gtag.js) - Google Analytics