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