Android 图片加载,内存过大问题

原创 2016年08月31日 16:02:10

问题描述:

本人要实现Android本地图片加载,并实现轮播效果。代码调试过程中真心被内存问题搞得想说爱你不容易。最后查阅资料,得到以下方案,内存问题得到有效改善,希望对各位有用。

解决方案:(封好的方法,直接调用即可)

public Bitmap decodeBitmap(String path)
    {
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        //把它设为true,那么BitmapFactory.decodeFile(String path, Options opt)
        //并不会真的返回一个Bitmap给你,
        //它仅仅会把它的宽,高取回来给你,这样就不会占用太多的内存,也就不会那么频繁的发生OOM了
        
        // 通过这个bitmap获取图片的宽和高       
        Bitmap bitmap = BitmapFactory.decodeFile(path, options);
        
        if (bitmap == null)
        {
             System.out.println("bitmap为空");
        }
        
        float realWidth = options.outWidth;
        float realHeight = options.outHeight;
        System.out.println("真实图片高度:" + realHeight + "宽度:" + realWidth);
        // 计算缩放比       
        int scale = (int) ((realHeight > realWidth ? realHeight : realWidth) / 100);
        if (scale <= 0)
        {
            scale = 1;
        }
        options.inSampleSize = scale;
        options.inJustDecodeBounds = false;
        options.inPreferredConfig = Config.RGB_565;
        options.inDither = true;
          // 注意这次要把options.inJustDecodeBounds 设为 false,这次图片是要读取出来的。
          //&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
        bitmap = BitmapFactory.decodeFile(path, options);
       
        return bitmap;
    }   


代码主体:

String picPath=Environment.getExternalStorageDirectory().getAbsolutePath()+ "/SouthElectric"+deviceId+"/"+nList.get(i);
                        Bitmap bm =decodeBitmap(picPath);


就这么多啦,图片加载内存问题是绕不过去的坎。鉴于本人能力有限,只能优化到这里了,如果各位兄台还有更好的解决方案,可以交流撒~有用的话点个赞哟!


深入安卓大图片处理机制,本地及网络图片不加载到内存预压缩

深入安卓大图片处理机制 本地及网络图片不加载到内存预压缩
  • Davidluo001
  • Davidluo001
  • 2015年12月09日 10:08
  • 1520

Android大图加载内存优化(如何防止OutOfMemory)

第三方图片加载核心技术揭秘:揭秘ImagLoader或者Picasso等第三方开源库的核心:加载原理和缓存原理。...
  • CJ_star
  • CJ_star
  • 2015年08月21日 15:47
  • 2288

Android内存溢出整理总结 OOM(Out Of Memory) 加载的图片太多或图片过大时经常出现OOM问题

Android内存溢出整理总结 OOM(Out Of Memory) 加载的图片太多或图片过大时经常出现OOM问题加载的图片太多或图片过大时经常出现OOM问题,找网上资料也提供了很多方法,整理下: ...
  • west8623
  • west8623
  • 2016年03月03日 14:40
  • 1379

Android 图片加载导致内存占用过大的问题

Android经常出现的OOM就是因为加载的图片过多没有及时回收,所以造成占用的内存过大,接下来就OOM了.下面是转载,得到的启示:不要乱设置背景图了... ----------------...
  • yulinyige
  • yulinyige
  • 2014年02月28日 21:54
  • 2094

android内存溢出 java.lang.OutOfMemoryError

感觉做android平台的电视产品,就是一个要和OOM作斗争的路。 一个GridView,一张图片几百KB,刷几页就上百M了。 试过一些优化的办法,解决这个问题真的是个漫长的过程。 ...
  • wangyuchen123
  • wangyuchen123
  • 2016年07月03日 13:19
  • 83

Android---加载图片 解决图片过大导致的内存溢出问题

图片的处理 图片的总大小 = 图片的总像素 * 每个像素的大小 BMP 无损格式位图 单色(黑、白)、16、256、24(RGB) 单色每个像素只能表示两钟颜色,只需要使用一个长度为1的二进制数字即...
  • u013476556
  • u013476556
  • 2016年03月29日 21:09
  • 759

适配——Drawable适配,占用内存测试

转自http://blog.csdn.net/wrg_20100512/article/details/51295317 首先我准备了一张600×960像素的png图片大小为248k,文件名为tes...
  • chuntiandejiaobu10
  • chuntiandejiaobu10
  • 2016年08月29日 18:43
  • 316

javascript图片预加载-解决图片延迟响应慢

使用JavaScript改变图片路径时存在一个问题:当把新文件的路径交换到src属性中时,浏览器必须下载该图像。如果等到某人把鼠标光标移动到图像上之后才下载新图像,在新图像出现之前,可能会有一段不愉快...
  • menyaliqi
  • menyaliqi
  • 2014年08月01日 22:12
  • 1105

android客户端加载网络大图片如何避免内存溢出的两种方法

方法一: 在Android开发中加载sdcard上的大图片到内存时容易导致OOM异常,常见的解决办法是基于BitmapFactory.Options类提供的方法定义指定的解码方式,设置inJ...
  • u010013573
  • u010013573
  • 2015年12月28日 19:33
  • 1591

关于Android加载图片OOM之Fresco解决办法

做Android开发已有一年,网络上解决oom的方案有很多,这里我采用的是fresco,开源框架,这个框架介绍什么的,我也就不多说了,没啥意义,在这里需要注意两点:第一,这个框架是需要配置的,第二,o...
  • android_mylife
  • android_mylife
  • 2017年02月13日 09:45
  • 1625
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 图片加载,内存过大问题
举报原因:
原因补充:

(最多只允许输入30个字)