我有一个gridview的自定义布局。 gridview的每个原始包含一个进度条,两个图像视图和两个文本视图。图像大小是缩略图大小。虽然我必须加载大量的位图,例如: - 500张图像,这会导致内存不足错误。图像首次从Internet加载,然后存储在SD卡中,下次加载从SD卡加载的gridview时。如何克服这个问题。如果gridview用单个imageview充气,我找到了许多克服内存不足的答案。请建议我在使用自定义布局时如何克服这个问题。让我知道,如果你知道在gridview中膨胀自定义布局时在gridview中处理这种内存不足错误的任何示例项目。
答案 0 :(得分:2)
最好创建一个扩展Application的类。这个 应用程序类每次都会给你onlowmemory()回调 应用程序内存不足。在那里你可以写
public void onLowmemory(){
。调用Runtime.getRuntime()GC(); }
将调用系统GC方法。执行垃圾收集器 android将垃圾所有未使用的对象。
还有另一种方法可以解决这个问题。在动画中你可以打电话 调用Runtime.getRuntime()GC();调用垃圾收集器。也在 activity onDestroy()方法你可以调用Runtime.getRuntime()。gc();
所以你的问题将得到解决
答案 1 :(得分:0)
在gridview out of memory
的图片中尝试此代码集BitmapFactory.Options options=new BitmapFactory.Options();
options.inSampleSize = 8;//you set size qulity for image(2,3,,4,5,6,7,8 etc..)
Bitmap preview_bitmap=BitmapFactory.decodeStream(is,null,options);
在imageview中设置此位图
答案 2 :(得分:0)
我面临同样的问题。 OutOfMemoryError通常由。引起 第一种方法是
BitmapFactory.decodeFile(srcImg);
由于图像在显示之前被转换为位图,因此许多大位图通常会导致错误。
为了解决这个问题,我添加了以下功能
public static Bitmap decodeWithBounds(String srcImg, int bounds) {
if (bounds > 0){
BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(srcImg, options);
if (options.outHeight > bounds || options.outWidth > bounds){
options.inSampleSize = Math.max(options.outHeight/bounds, options.outWidth/bounds);
}
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(srcImg, options);
} else {
return BitmapFactory.decodeFile(srcImg);
}
}
我使用此函数解码位图,边界=网格大小。
这解决了大部分问题。
对于非常低端的设备,添加try {} catch(OutOfMemoryError e){} ...
答案 3 :(得分:0)
使用此代码解决内存不足异常问题
Bitmap bitmap = BitmapFactory.decodeStream(is);
if (bitmap != null) {
Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
imageView = new ImageView(mContext);
imageView.setImageBitmap(resizedBitmap);
}