在某些设备中,位图的大小超过了虚拟机的预算。
在某些设备中,位图的大小超过了虚拟机的预算。
我正在做一个Android应用程序,使用一台内存为3GB的设备运行良好,但在一台内存为512MB的设备上运行不佳。我遇到了一个错误\"bitmap size exceeds VM budget\",我不知道该如何解决。这是我的布局代码,其中使用了许多可绘制对象。我尝试了其他问题中提到的方法,但是仍然无法解决问题。\n@Override\nprotected void onDestroy() {\n super.onDestroy();\n unbindDrawables(findViewById(R.id.RootView));\n System.gc();\n}\nprivate void unbindDrawables(View view) {\n if (view.getBackground() != null) {\n view.getBackground().setCallback(null);\n }\n if (view instanceof ViewGroup) {\n for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {\n unbindDrawables(((ViewGroup) view).getChildAt(i));\n }\n ((ViewGroup) view).removeAllViews();\n }\n}
在一些设备上出现了“bitmap size exceeds VM budget”的问题。这个问题的原因可能是由于使用了过大的Bitmap对象导致内存超出了设备的虚拟机内存限制。为了解决这个问题,可以采取以下措施:
1. 对于处理Bitmap对象:
BitmapFactory.Options options=new BitmapFactory.Options(); options.inSampleSize = 8; options.inDither = false; options.inPurgeable = true; options.inInputShareable = true; Bitmap bitmap = BitmapFactory.decodeStream(is, null, options);
在将Bitmap实例设置为null之前,使用`bitmap.recycle()`方法释放内存。
2. 对于处理res/drawable中的图片:
- 在项目的清单文件中的application标签中添加`android:largeHeap=“true”`属性。
- 使用图形编辑器调整图片的大小和尺寸,减小图片的大小。
需要注意的是,有人认为这个错误只会在logcat中显示,不会影响应用程序,这是完全错误的。OutOfMemoryError是Java中的一个Error,比RuntimeException更为严重,会使应用程序崩溃。
此外,需要注意android:largeHeap属性只适用于API级别11及以上的设备。如果当前的最小API级别是8,则无法使用该属性。可以尝试使用其他方法来避免这个错误。
,解决“bitmap size exceeds VM budget”的问题,可以通过调整Bitmap的参数和释放内存的方式来减小内存占用,同时可以通过调整图片的大小和尺寸来减小图片的内存占用。
在某些设备上出现了“bitmap size exceeds VM budget”问题,即位图大小超过了虚拟机(VM)的内存限制。这个问题的出现原因是图片的内存占用过大,超过了设备的内存容量。为了解决这个问题,可以对位图进行压缩处理。
以下是一种解决方法,可以在显示位图时对位图进行压缩:
image.buildDrawingCache(); Bitmap img = image.getDrawingCache(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); img.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] food = stream.toByteArray();
在显示位图之前,将位图进行压缩处理,并将压缩后的位图保存在一个字节数组中。这样可以减小位图的内存占用。
另外,还可以使用以下代码获取要显示的位图,并对其进行压缩处理:
Bitmap bitmap = ((BitmapDrawable) imageView.getDrawable()).getBitmap();
通过以上解决方法,可以有效地解决“bitmap size exceeds VM budget”问题,避免因位图内存占用过大而导致的内存溢出问题。