今天遇到这个问题就是从一个输入流里调用BitmapFactory.decodeFile(name)得到一个bitmap报的错。第一次调用都没问题,第二次再次调用就会报上面那个内存溢出的问题。而且有的手机报有的手机不报。研究了半天终于解决。首先分析了下原因,应该是图片占用的内存超过了系统虚拟机可分配的最大限制。不同手机可能分配的最大值不一样。后来找到解决办法主要是设置BitmapFactory.Options。
成都网站建设哪家好,找成都创新互联!专注于网页设计、成都网站建设、微信开发、小程序开发、集团成都定制网页设计等服务项目。核心团队均拥有互联网行业多年经验,服务众多知名企业客户;涵盖的客户类型包括:主动防护网等众多领域,积累了大量丰富的经验,同时也获得了客户的一致认可!
BitmapFactory.Options option = new BitmapFactory.Options(); option.inSampleSize = 4; try { Bitmap bmp = BitmapFactory.decodeFile(Path,option); holder.icon.setImageBitmap(bmp); } catch (OutOfMemoryError err) {}
有的说要加上bitmapOptions.inJustDecodeBounds = true;但是我加上后得到的bitmap就为null。去掉之后就可以。按照上面的方法就解决问题了。最好把bitmap在不用的时候回收一下:
if (bitmap != null && !bitmap.isRecycled())
bitmap.recycle();