为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

holdtom 2019-07-06 17:51:43
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
查看完整描述

3 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞


使用decodeStream(is, outPadding, opts)带着


BitmapFactory.Options opts=new BitmapFactory.Options();

opts.inDither=false;                     //Disable Dithering mode

opts.inPurgeable=true;                   //Tell to gc that whether it needs free memory, the Bitmap can be cleared

opts.inInputShareable=true;              //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future

opts.inTempStorage=new byte[32 * 1024]; 


查看完整回答
反对 回复 2019-07-06
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以检查图像大小,然后通过适当的因素降低采样。

见这个问题:处理大型位图


查看完整回答
反对 回复 2019-07-06
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

事实上,在一些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-更新,其余的可能由其他准时的原因解释。


查看完整回答
反对 回复 2019-07-06
  • 3 回答
  • 0 关注
  • 538 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信