OutOfMemoryError:位图大小超过VM预算:-Android

OutOfMemoryError:位图大小超过VM预算:-Android

我正在从URL下载图像并显示它们。下载的时候out of memory error : bitmap size exceeds VM budget..我用的是可绘图。代码如下:

HttpClient httpclient= new DefaultHttpClient();HttpResponse response=(HttpResponse)httpclient.execute(httpRequest);
HttpEntity entity= response.getEntity();BufferedHttpEntity bufHttpEntity=new BufferedHttpEntity(entity);
InputStream instream = bufHttpEntity.getContent();Bitmap bm = BitmapFactory.decodeStream(instream);
Bitmap useThisBitmap = Bitmap.createScaledBitmap(bm,bm.getWidth(),bm.getHeight(), true);bm.recycle();
BitmapDrawable bt= new BitmapDrawable(useThisBitmap);System.gc();

以下是错误:05-28 14:55:47.251: ERROR/AndroidRuntime(4188): java.lang.OutOfMemoryError: bitmap size exceeds VM budget


holdtom
浏览 540回答 3
3回答

慕沐林林

使用decodeStream(is, outPadding, opts)带着BitmapFactory.Options opts=new BitmapFactory.Options();opts.inDither=false;                     //Disable Dithering modeopts.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be clearedopts.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the futureopts.inTempStorage=new byte[32 * 1024]; 

神不在的星期二

您可以检查图像大小,然后通过适当的因素降低采样。见这个问题:处理大型位图

芜湖不芜

事实上,在一些Android版本上存在一个bug,特别是2.1版本经常会出现这样的问题。我发布了一个应用程序,我在资源使用上花了很多心思。我甚至删除了很多我正在使用的位图,现在它们是使用图形原语动态创建的。当不使用位图时,我也会回收它们。当然,我已经检查了我的应用程序中没有内存泄漏:使用过的内存不会在没有控制的情况下增长,它总是将内存保持在合理的值内。尽管我为避免这个问题付出了很大的努力,但我仍然在2.1和2.1-update1设备上遇到了许多令人讨厌的例外情况。我现在使用的是规范主义来报告崩溃,而且我已经看到,即使应用程序只使用4兆内存,也会发生这种情况,这比每个Android设备对应用程序必须拥有的堆大小的16M要小4倍-事实是,如今大多数设备的堆大小都大于16M。我所有的位图都有800x480像素的大小,在最坏的情况下,ARGB_8888每个位图的占用可能不会超过1.5MB,但当占用4 MB时,它会崩溃,试图加载一个,所以至少还有12 MB空闲。而且我的大部分位图都是作为占用一半内存的ARGB_4444加载的,我只使用ARGB_8888,当位图看起来很差时使用4444。因此,对我来说,很明显,这些Android版本中有些东西不能正常工作。99‘9%的崩溃来自2.1和2.1-更新,其余的可能由其他准时的原因解释。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Android