Android 将位图添加到20个动态图像视图会导致java.lang.OutOfMemoryError错误
我正在动态创建20个图像视图,并将位图设置为背景。我正在从SD卡中存储的图像创建位图Android 将位图添加到20个动态图像视图会导致java.lang.OutOfMemoryError错误,android,memory-management,bitmap,Android,Memory Management,Bitmap,我正在动态创建20个图像视图,并将位图设置为背景。我正在从SD卡中存储的图像创建位图 for (int i = 0; i < 20; i++) { imageView = new ImageView(this); imageView.setId(i); imageView.setPadding(2, 2, 2, 2); imageView.setScaleType(I
for (int i = 0; i < 20; i++) {
imageView = new ImageView(this);
imageView.setId(i);
imageView.setPadding(2, 2, 2, 2);
imageView.setScaleType(ImageView.ScaleType.FIT_XY);
layout.addView(imageView);
android.view.ViewGroup.LayoutParams params = imageView.getLayoutParams();
params.width = 200;
params.height = 200;
imageView.setLayoutParams(params);
// display thbe Bitmap in the ImageView
bm = BitmapFactory.decodeFile(pathOfImage+i);
ByteArrayOutputStream bao2 = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 50, bao2);
imageView.setImageBitmap(bm);
}
我得到一个java.lang.OutOfMemoryError错误
关于如何释放内存或回收的任何指示?对于Android 3.0及以上版本,GCGarbage Collector将完美地回收位图 然而,如果你在旧版本上运行你的应用程序,因为位图不能很好地被GC监控,你可能会得到很多内存 在任何情况下,只要确定不再需要位图,仍然建议调用recycle。它甚至对新的android版本也很好,因为它降低了自动内存管理所需的工作量 以下是回收位图的片段:
if (bitmap != null) {
bitmap.recycle();
bitmap = null;
}
在您的情况下,在imageView.setImageBitmapbm;之后会像下面这样
*OOM还取决于加载的图像类型图像大小、图像像素等。当你在应用程序中使用图像太多时,最好使用自动渲染这些图像的库,这样就不必担心内存管理。毕加索就是一个很好的例子。看看。图像有多大?图像是1000*1000像素。大约1MB大小。
if (bm != null) {
bm.recycle();
bm = null;
}