
android系统中读取位图Bitmap时.分给虚拟机中图片的堆栈大小只有8M。所以不管是如何调用的图片,太多太大虚拟机肯定会报那个错误。超出图片内存预算那个错误.:java.lang.OutOfMemoryError: bitmap size exceeds VM budget
遇到这个问题是因为没有回收资源.
public void distoryBitmap(){
if(null!=bmb&&!bmb.isRecycled())
bmb.recycle();
}
调用上面的代码可以基本解决这个问题.但是千万不要在view中的onDraw()中调用.因为onDraw()方法是系统循环调用.只要图片打开.
系统就不停的调用该方法.
最好的解决方案是在自定义的View中添加一个init()初始化方法的头部调用.或者在构造函数的顶部调用:
public class GifView extends View implements Runnable {
private Bitmap bmb;
public GifView(Context context, InputStream inputStream) {
super(context);
distoryBitmap();
bmb = BitmapFactory.decodeStream(is);
}
}
本文介绍了在Android应用开发过程中遇到的图片内存溢出问题及其解决方案。通过在自定义View中适当地释放Bitmap资源,避免了因图片占用过多内存而导致的java.lang.OutOfMemoryError异常。
1237

被折叠的 条评论
为什么被折叠?



