`

gridview图片过大,连续几次打开关闭程序就会溢出内存

 
阅读更多
@Override 
protected void onPause() { 
	GridView gridView = (GridView) findViewById(R.id.public_photos); 
	int count = gridView.getCount(); 
	for(int i = 0; i < count; i++){ 
		ImageView v = (ImageView) gridView.getChildAt(i); 
		if (v != null){ 
			if (v.getDrawable() != null) v.getDrawable().setCallback(null); 
		} 
	} 
	super.onPause(); 
}


Bitmap的OOM确实很让人头疼,所以在制造缩略图的时候直接把图片全部载入内存确实不合适,BitmapFactory.Options有个熟悉叫inJustDecodeBounds,可以把图片载入内存,但是可以获取一些边界信息,也就是图片大小信息。所以可以先预读取一次,算成缩放值,再按照该大小读取图片,具体的代码

BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
// 获取这个图片的宽和高
Bitmap bitmap = BitmapFactory.decodeFile("/sdcard/fortest.jpg", options); //此时返回bm为空
options.inJustDecodeBounds = false;
 //计算缩放比
int rate = (int)(options.outHeight / (float)100);
if (rate <= 0)
	rate = 1;
options.inSampleSize = rate;
//重新读入图片,注意这次要把options.inJustDecodeBounds 设为 false哦
bitmap=BitmapFactory.decodeFile("/sdcard/fortest.jpg",options);
int w = bitmap.getWidth();
int h = bitmap.getHeight();
ImageView im=new ImageView(this);
im.setImageBitmap(bitmap);


最后,图片存储的时候可以直接用bitmap.compress()方法

try {
	FileOutputStream out=new FileOutputStream(file);
	if(bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)){
		out.flush();
		out.close();
	}
} catch (FileNotFoundException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}
分享到:
评论

相关推荐

    GridView加载大量图片卡的问题

    - **图片尺寸调整**:根据GridView的item大小动态调整图片的尺寸,避免加载过大的图片导致内存消耗过高。 - **滚动监听**:监听GridView的滚动事件,只在即将可见的item范围内加载图片,实现“滚动即加载”。 - **...

    GridView异步加载大量网络图片

    当应用程序占用的内存超过系统分配的最大值时,就会触发内存溢出。在Android中,尤其是加载大图或大量图片时,如果直接在主线程中进行,会导致UI卡顿,甚至引发应用崩溃。 解决这个问题的关键是异步加载。异步加载...

    android加载大量图片内存溢出的三种解决办法

    android加载大量图片内存溢出的三种解决办法

    Android GridView 图片缩放

    除了上面提到的,还可能涉及到内存和磁盘缓存策略,如LruCache或Picasso库,以优化图片加载,防止内存溢出。此外,针对大量图片的显示,我们还需要考虑性能优化,比如使用BitmapOptions预先计算Bitmap的大小,或者...

    GridView图片墙,ListView中嵌入GridView,图片异步下载

    在实现图片墙时,我们通常会将每个单元格设为一张图片,通过设置GridView的列数和间距,创建出美观的图片展示效果。要实现GridView的高度自适应,我们需要在Adapter中动态计算每个单元格的高度,这通常涉及到图片的...

    android gridview 加载大量图片。无OOM

    然而,当GridView需要加载大量图片时,如果不妥善处理,很容易导致内存溢出(Out-Of-Memory,简称OOM)问题。本篇文章将深入探讨如何在Android GridView中加载大量图片,同时避免出现OOM错误。 首先,理解OOM的原因...

    GridView显示大量图片

    这个问题通常是由于图片加载不当导致内存消耗过大而引起的。以下将详细讨论如何在Android中完美解决GridView异步加载图片和处理大量图片时的内存优化策略。 1. **使用BitmapOptions预估大小** 在加载图片之前,...

    Android完美解决GridView异步加载图片和加载大量图片时出现Out Of Memory问题

    然而,当处理大量图片时,特别是在用户滚动时实时加载,可能会遇到内存溢出(Out Of Memory,简称OOM)的问题。这是因为Android系统为每个应用程序分配的内存有限,而加载大图或大量图会消耗大量内存。因此,我们...

    用GridView加动画写了一个滑动放大显示选中图片

    用GridView加动画写了一个滑动放大显示选中图片 项目需求在制定大小区域写一个横向菜单栏,菜单栏整体不能移动,GalleryFlow画廊不能满足需求,就自己重写写了一个)划到当图片时换个图片且动画效果渐渐放大,划到下...

    android GridView 添加图片

    - 缩放图片大小以适应屏幕,防止大图加载慢或者内存消耗过大。 - 使用异步加载图片,避免阻塞UI线程。 9. **响应式设计** - 考虑不同屏幕尺寸和分辨率,使用比例适配或dp单位确保图片在不同设备上的显示效果。 ...

    GridView异步加载网络图片

    为了避免内存溢出,需要根据ImageView的实际大小动态调整图片尺寸。在下载图片前,先获取ImageView的宽高,然后根据比例下载相应尺寸的图片。 6. **加载状态显示** 可以添加占位符(如loading图片)表示图片正在...

    excel文件图片和gridview图片

    excel文件图片和gridview图片

    GridView图片墙,ListView嵌入GridView

    GridView图片墙,ListView嵌入GridView

    GridView图片异步显示

    当涉及到图片显示时,如果直接在GridView中加载大图,可能会导致应用卡顿,用户体验下降。因此,"GridView图片异步显示"是一个重要的优化策略,它通过异步加载技术来避免主线程阻塞,提高应用性能。 GridView的图片...

    Android网络加载图片GridView缓存处理Demo

    - 图片的尺寸应该与GridView单元格匹配,避免加载过大图片,浪费资源。 - 当图片从网络加载时,可以显示一个占位符或进度指示器,提高用户体验。 - 考虑使用更高级的图片加载库,如Glide或Picasso,它们内置了缓存和...

    GridView添加图片DeleteGridView

    4. 考虑性能优化,避免因大量图片加载导致内存溢出。可以通过使用ViewHolder模式减少视图查找的开销,以及合理配置图片的大小和质量。 接下来,我们关注"Delete GridView"这一部分,这通常指的是在每个单元格中添加...

    GridView绑定图片

    7. **优化性能**:由于图片可能会占用大量内存,因此在加载图片时,我们需要注意进行尺寸调整,避免加载过大图像导致性能问题。同时,可以考虑异步加载图片,避免阻塞主线程。 8. **事件监听**:如果需要对GridView...

    Gridview点击切换图片

    对于大量图片,推荐使用内存缓存(如LruCache)和磁盘缓存(如DiskLruCache)策略,以防止内存溢出并提高加载速度。 5. 动态添加边框和播放按钮: 这可能需要在`getView()`中根据点击状态动态设置ImageView的背景...

    GridView图片浏览

    4. **图片加载优化**:由于图片可能较大,直接加载可能会消耗大量内存,导致应用崩溃。因此,通常会使用一些图片加载库,如Glide、Picasso或Universal Image Loader,它们可以自动处理内存和磁盘缓存,以及图片的...

    GridView中的Item放大缩小

    GridView继承自AbsListView,它会根据指定的列数自动调整子视图的大小,以填满整个屏幕。默认情况下,GridView的每个Item都是等大小的。要在GridView中实现Item的放大缩小,我们需要自定义一个GridView的Adapter,...

Global site tag (gtag.js) - Google Analytics