`

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"这一部分,这通常指的是在每个单元格中添加...

    Android ListView,Gridview动态加载释放图片资源

    但是如果图片多了就会遇到内存溢出的情况,及时你对图片做了缩放处理但是图片张数多了还是一样的会内存溢出。所以这个时候就需要我们动态的释放和加载图片资源。附件中是小弟根据自己的想法实现的动态加载和释放图片...

    GridView绑定图片

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

    Gridview点击切换图片

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

    GridView图片浏览

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

Global site tag (gtag.js) - Google Analytics