首先处理这个问题,用了1个星期,非常努力,拼命的寻找哪里出现了OOM 内存溢出的问题,可是都没找到结果,一直以为是自己使用的Picaso加载图片框架,只加载了图片,但是activity 销毁时,没有做内存释放的功能,所以自己去尝试方法去解决问题:
1.换一个图片框架:Xutil 图片框架
结果只是换汤不换药。 还是会出现OOM ,内存溢出问题
2.图片单独处理:网上说针对于大图,要做缩放处理,并对生成的BitMap 对象进行内存处理
private void initDisplayImageOption(){
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.video_default) //设置图片在下载期间显示的图片
.showImageForEmptyUri(R.drawable.image_background_empty) //设置图片Uri为空或是错误的时候显示的图片
//.showImageOnFail(R.drawable.image_background_erro) //设置图片加载/解码过程中错误时候显示的图片
.cacheInMemory(false) //设置下载的图片是否缓存在内存中
.cacheOnDisk(true) //设置下载的图片是否缓存在SD卡中
.considerExifParams(true) //是否考虑JPEG图像EXIF参数(旋转,翻转)
.imageScaleType(ImageScaleType.EXACTLY_STRETCHED) //设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) //设置图片的解码类型//
//.decodingOptions(android.graphics.BitmapFactory.Options decodingOptions) //设置图片的解码配置
.delayBeforeLoading(0) //int delayInMillis为你设置的下载前的延迟时间
.resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位
.displayer(new FadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间
.build();//构建完成
}
@Override
protected void onDestroy() {
mam.popOneActivity(HostessDetailUI.this);
Log.e("onDestroy() isRun!!!");
mHostessImgs.setAdapter(null);
/**释放图片,控件图片引用资源*/
BitmapDrawable bitmapDrawable = (BitmapDrawable) mHostessMiddle.getBackground();
mHostessMiddle.setBackgroundResource(0);
bitmapDrawable.setCallback(null);
drawable.setCallback(null);
Bitmap bitmap = bitmapDrawable.getBitmap();
if(bitmap != null && !bitmap.isRecycled()){
bitmap.recycle();//回收图片所占的内存
bitmap = null;
}
btp.recycle(); //回收图片所占的内存
System.gc();
super.onDestroy();
}
3.换一种强大的图片框架:Universal-Image_loader(UIL)
看见网上说UIL是目前最流行,用户最多,个人配置最全的图片框架,于是乎自己换掉picaso,来到UIL的怀抱,可是还是报OOM问题,每次看日志都是跑到96MB闪退。
自己怀疑是自己对UIL理解不深,配置不全,还是没有释放内存。(有时间详细看下UIL源码实现)
4.换上最新的图片处理框架:Facebook 推荐的fresco 框架
dependencies {
compile 'com.facebook.fresco:fresco:0.5.0+'
}
5.去掉后台的大图,显示完整
程序不崩溃了,心里有很多的安慰,毕竟问题已经出现了1个星期了,然而还是有一些个别的图片很久都加载不出来,fresco框架这么好,为什么还是有图片加载不出来你。然后看日志 提示:加载图片太大,无法下载出来,于是看了下后台拉取的图片大小。纳尼。, 一张图片7MB!! 再完美的框架针对这种图片也是没办法的吧,所以让后台处理的图片规格。
最终解决办法:换上fresco框架+后台图片缩小处理。现在程序不会出现OOM问题了。好开心!(不过内存释放问题,自己还是没有做好,有待提高!)
原文:http://blog.csdn.net/zqs62761130/article/details/45971521