本文共 1041 字,大约阅读时间需要 3 分钟。
从本地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;
mBgBitmap = BitmapFactory.decodeResource(getActivity().getResources(), imgv[position],opts);t.setImageBitmap(mBgBitmap);
imgv是存放资源文件的数组,t是Imgview。
这块还有一个问题就是内存释放,我用的感觉比较好的是下面这个方法,可以试一下,本人也是一介菜鸟,原理 还没理解,只不过感觉可以解决问题
t.setImageBitmap(null); if(mBgBitmap != null && !mBgBitmap.isRecycled()) { System.out.println("释放内存!"); mBgBitmap = null; } System.gc();
先将所要赋值的控件置为空,防止有关联的文件出现非法释放
再将bitmap置为空,最后释放c端代码中的内存
转载地址:http://nkmxl.baihongyu.com/