0

我有一个 gridview 的自定义布局。每个原始的 gridview 都包含一个进度条、两个图像视图和两个文本视图。图像大小是缩略图大小。虽然我必须加载大量位图,例如:- 500 张图像,这会导致内存不足错误。图像是第一次从 Internet 加载,然后存储在 SD 卡中,下次加载从 SD 卡加载的 gridview 时。如何克服这个问题。如果gridview被单个imageview膨胀,我已经找到了很多解决内存不足的问题。请建议我在使用自定义布局时如何克服此问题。如果您知道任何示例项目在 gridview 中处理此内存不足错误,同时在 gridview 中膨胀自定义布局,请告诉我。

4

4 回答 4

2

最好创建一个扩展 Application 的类。每当应用程序内存不足时,此应用程序类将为您提供 onlowmemory() 回调。在那里你可以写

公共无效 onLowmemory() {

Runtime.getRuntime().gc(); }

这将调用系统 GC 方法。执行垃圾收集器后,android 将垃圾所有未使用的对象。

还有另一种方法可以解决这个问题。在动画中你可以调用 Runtime.getRuntime().gc(); 调用垃圾收集器。同样在活动 onDestroy() 方法中,您可以调用 Runtime.getRuntime().gc();

所以你的问题将得到解决

于 2013-06-24T07:33:08.707 回答
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){} ...

于 2013-06-24T07:40:49.653 回答
0

尝试在图像中设置此代码以用于 gridview 内存不足

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);

在您的图像视图中设置此位图

于 2013-06-24T07:38:39.850 回答
0

使用此代码解决内存不足异常问题

Bitmap bitmap = BitmapFactory.decodeStream(is);
if (bitmap != null) {
    Bitmap resizedBitmap = Bitmap.createScaledBitmap(bitmap, 100, 100, true);
    imageView = new ImageView(mContext);
    imageView.setImageBitmap(resizedBitmap);
}
于 2016-10-18T15:54:23.893 回答