• Bitmap OutOfMemoryError


    在创建Bitmap的时候因为对象过多而没有即使回收,导致的内存不足:

    java.lang.OutOfMemoryError
    E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)
    E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:500)
    E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:353)
    E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:376)
    E/AndroidRuntime(21898):     at android.graphics.BitmapFactory.decodeResource(BitmapFactory.java:406)


    解决的方法:

    方法一:减小图片大小

    BitmapFactory.Options opts = new BitmapFactory.Options(); 

    opts.inSampleSize = n; 

    bitmap = BitmapFactory.decodeStream(fis, null, opts);

    opts.inSampleSize的默认值是0 ,设置其值能够压缩图片以减小OOM几率,这样的方法能够缓解问题可是不能彻底解决这个问题,当某时bitmap对象超过阀值时还是回报错。


    方法二:及时回收bitmap内存:

    if(bitmap != null && !bitmap.isRecycled()){  
            bitmap.recycle();  
            bitmap = null;  
    }  
    System.gc();  


    bitmap.recycle()方法用于回收该bitmap所占用的内存。接着将bitmap置空,最后,用System.gc()调用一下系统的垃圾回收器。


    方法三: 自然是优化代码结构

    好的代码结构和代码风格是程序猿毕生追求...!



  • 相关阅读:
    Asp.Net-Mvc——短信验证码
    C#-Mvc-表白墙(随机数)
    C#-折线图-从数据库中读取数据
    C#-Mvc-修改密码
    C#-Mvc-产品分页
    ECharts查询用户点击次数
    ECharts-条形图制作
    设置当前登录用户问题
    sql执行计划
    SQL中CUBE 用法
  • 原文地址:https://www.cnblogs.com/jhcelue/p/7295503.html
Copyright © 2020-2023  润新知