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);


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


相关文章推荐

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

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

android开发游记:位图压缩技巧与方法总结,解决加载大图内存占用过大问题

由于移动设备内存限制的原因,很多时候我们在自己的应用中不得不考虑到性能的问题,如何使用较少的内存空间来尽可能的获得高效的执行效率,是每个开发者必须考虑的,以图片压缩为例,一张图片所占用的内存空间计算公...

Android解决图片上传过大问题

最近在实现一个多图上传的功能(以流的形式上传),发现当上传图片超过5张的时候,就会报内存溢出的问题,去相册查看了一下,原来现在每张照片都占到2,3mb,如果几张大图就这么直接加载到内存中,肯定会溢出的...

Android开发之大图片加载内存溢出

缩放加载加载大图片(使用大图片时可能出现的异常)Caused by: java.lang.OutOfMemoryErrorPS: 图片宽高:2400*3200 手机屏幕大小:320*480 宽...

Android网络图片加载内存溢出(OOM)解决方案

将大量图片直接加载到内存中,是造成OOM的主要原因。 解决方法: 添加本地缓存,不直接从网络加载图片到内存。将图片缓存到本地,每次都从本地获取图片,如果本地没有,再从网络获取。本地缓存开启线程,将...

【Android性能优化】Android图片加载方案--Bitmap的内存管理和优化方案

写在前面:笔者的上一篇博文有提到过,如果不恰当的使用Bitmap,很容易造成OOM。这篇博文就来谈谈应该如何正确的管理Bitmap的内存,以及优化策略。参考: Google官方教程 – 《Androi...

[置顶] 【Android性能优化】Android图片加载方案--Bitmap的内存管理和优化方案

[置顶] 【Android性能优化】Android图片加载方案--Bitmap的内存管理和优化方案 标签: Bitmap优化OOM缓存图片加载 2016-03-31 18:04 9811人...

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

图片的处理 图片的总大小 = 图片的总像素 * 每个像素的大小 BMP 无损格式位图 单色(黑、白)、16、256、24(RGB) 单色每个像素只能表示两钟颜色,只需要使用一个长度为1的二进制数字即...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android 图片加载,内存过大问题
举报原因:
原因补充:

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