我有199KB的图像存储在内存中。我的设备的总内存是512MB。Android版本是2.3.5。所以我所做的就是让所有的图像在运行时都是位图可绘制的。
我得到了以下异常:
10-10 14:16:03.782: E/dalvikvm-heap(20331): 73632-byte external allocation too large for this process.
10-10 14:16:03.782: E/dalvikvm(20331): Out of memory: Heap Size=6599KB, Allocated=3949KB, Bitmap Size=13871KB, Limit=20480KB
10-10 14:16:03.782: E/dalvikvm(20331): Trim info: Footprint=6599KB, Allowed Footprint=6599KB, Trimmed=264KB
10-10 14:16:03.792: E/GraphicsJNI(20331): VM won't let us allocate 73632 bytes以下是我的代码:
File myDir =act.getApplicationContext().getDir(CURRENT_THEME, act.MODE_PRIVATE);
public BitmapDrawable getResourceFromInternalStorage(String resourceName)
{
// Runtime.getRuntime().gc();
String filename = resourceName;
File file = new File(myDir, filename+".png");
Resources res = act.getResources();
BitmapDrawable bd =null;
bitmap=null;
try
{
// BitmapFactory.Options options = new BitmapFactory.Options();
// options.inJustDecodeBounds = true;
// options.inSampleSize = 32;
BitmapFactory.Options bmpFactoryOptions = new BitmapFactory.Options();
bmpFactoryOptions.inJustDecodeBounds=true;
BitmapFactory.decodeFile(file.getPath(),bmpFactoryOptions);
long reqsize=bmpFactoryOptions.outWidth*bmpFactoryOptions.outHeight*2;
long allocNativeHeap = Debug.getNativeHeapAllocatedSize();
final long heapPad=(long) Math.max(4*1024*1024,Runtime.getRuntime().maxMemory()*0.1);
if ((reqsize + allocNativeHeap + heapPad) >= Runtime.getRuntime().maxMemory())
{
Toast.makeText(act, "exception", Toast.LENGTH_LONG).show();
// bitmap.recycle();
// Runtime.getRuntime().gc();
// System.gc();
// return null;
}
bmpFactoryOptions.inJustDecodeBounds=false;
bitmap=BitmapFactory.decodeFile(file.getPath(),bmpFactoryOptions);
bd = new BitmapDrawable(res, bitmap);
}
catch(java.lang.OutOfMemoryError e)
{
Log.v("Exceptional exception", e.getMessage());
bitmap.recycle();
System.gc();
}
finally{
}
return bd;
}发布于 2013-10-10 17:25:15
在您的位图上执行回收。你正在做这件事,但是在catch块中。
在try块中:
bitmap.recycle();
bitmap=null;尝试上面的代码并检查。
发布于 2013-10-10 18:26:19
请参阅android开发人员网站上的本教程
http://developer.android.com/training/displaying-bitmaps/index.html
请参阅:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
https://stackoverflow.com/questions/19291687
复制相似问题