从本地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端代码中的内存