Bitmap获取图片内存溢出

从本地sd卡获取图片内存溢出解决方法

 public Bitmap getBitmap(String path) {
    	
        File file = new File(path);
        Bitmap resizeBmp = null;
        BitmapFactory.Options opts = new   BitmapFactory.Options();
        // 数字越大读出的图片占用的heap越小 不然总是溢出
         opts.inSampleSize = 2;
        resizeBmp = BitmapFactory.decodeFile(file.getPath(), opts);
        return resizeBmp;
    }

如果图片是全屏显示的话

opts.inSampleSize = i;
i数值不要太大,如果是屏幕上的小图片的话尽情呀吧,i=1,压缩倍数是1倍,i=2压缩倍数是4倍,因为i是它边的压缩,整个图的话肯定的边长的平方么,大家懂得。
从资源文件中获取图片时也可能出现内存溢出,尤其是在Listview之类的适配器中进行调用的时候。
BitmapFactory.Options opts = new   BitmapFactory.Options();
opts.inSampleSize =5;
</pre><pre name="code" class="java"><span style="white-space:pre">mBgBitmap = BitmapFactory.decodeResource(getActivity().getResources(), imgv[position],opts);

t.setImageBitmap(mBgBitmap);</span>
imgv是存放资源文件的数组,t是Imgview。
这块还有一个问题就是内存释放,我用的感觉比较好的是下面这个方法,可以试一下,本人也是一介菜鸟,原理 还没理解,只不过感觉可以解决问题
t.setImageBitmap(null);
<span style="white-space:pre">			</span>if(mBgBitmap != null  && !mBgBitmap.isRecycled())  
<span style="white-space:pre">	</span>        {  
<span style="white-space:pre">				</span>System.out.println("释放内存!");
<span style="white-space:pre">				</span>mBgBitmap = null; 
<span style="white-space:pre">	</span>        } 
<span style="white-space:pre">			</span>System.gc();
先将所要赋值的控件置为空,防止有关联的文件出现非法释放
再将bitmap置为空,最后释放c端代码中的内存
上一篇:获取验证码倒计时,js代码


下一篇:【Offer 5000-数据库产品事业部-B】- 招聘职位详情