Universal image loader遇到OOM
来源:互联网 发布:手机通话加密软件 编辑:程序博客网 时间:2024/05/15 15:41
Universal image loader应该不用介绍了,大家应该都很熟悉了,但是近来在使用时候遇到了OOM,调用栈如下:
07-24 13:01:24.876 31362 31362 E AndroidRuntime: java.lang.OutOfMemoryError07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:594)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:429)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:840)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.content.res.Resources.loadDrawable(Resources.java:2110)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.content.res.Resources.getDrawable(Resources.java:700)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at com.nostra13.universalimageloader.core.DisplayImageOptions.getImageOnFail(DisplayImageOptions.java:142)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask$2.run(LoadAndDisplayImageTask.java:348)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:733)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.os.Looper.loop(Looper.java:136)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:5001)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at java.lang.reflect.Method.invokeNative(Native Method)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at java.lang.reflect.Method.invoke(Method.java:515)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:815)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:631)07-24 13:01:24.876 31362 31362 E AndroidRuntime: at dalvik.system.NativeStart.main(Native Method)
然后在网上查了一些资料,主要解决办法如下:
1. 减少线程池中线程的个数。在ImageLoaderConfiguration的.threadPoolSize中配置,推荐1-5.
2. 使用Bitmap.Config.RGB555代替Bitmap.Config.ARGB8888,减少内存占用。在DisplayImageOptions的.bitmapConfig中配置
3. 在ImageLoaderConfiguration中配置图片缓存策略为.memoryCache(new WeakMemoryCache())
4. 在DisplayImageOption中配置imageScaleType(ImageScaleType.IN_SAMPLE_INT)或是imageScaleType(ImageScaleType.EXACTY)
使用了上述4中方法,但是还是会遇到OOM,后来仔细分析下调用栈,发现是在对本地的图片资源进行解码时报出了OOM,那就取消配置showImageOnLoading和showImageOnFail,直接在ImageLoadingListener中setImageResource,这样就不会再出现OOM了。
至于原因,初步判断是Universal Image loader会对本地图片资源进行解码,但是android系统已经对本地的图片资源解码过了,所以会额外占用内存,从而使得报出OOM。
1 0
- Universal image loader遇到OOM
- Android-Universal-Image-Loader 使用遇到的oom问题
- Universal-Image-Loader出现oom
- 框架学习四-2:处理OOM之Universal-Image-Loader
- universal-image-loader解决OOM(从别处找的资料)
- Universal-Image-Loader应用
- android-universal-image-loader
- 翻译:Universal Image Loader
- universal-image-loader 配置
- Universal-Image-Loader
- universal-image-loader 配置
- Android-Universal-Image-Loader
- universal-image-loader 配置
- Android-Universal-Image-Loader
- Universal-Image-Loader
- Android-Universal-Image-Loader
- Android-Universal-Image-Loader
- Universal-Image-Loader解析
- 我国网络股民规模超5600多万户
- linux指令od的使用
- face++人脸识别的java调用
- iOS开发-清理缓存功能的实现
- NSString增加类方法
- Universal image loader遇到OOM
- js数组传值 到后台处理(json)
- Highcharts数字格式化
- 2012年5月SAT香港真题解析
- 机房收费系统之登陆模块(一)
- GRE写作必备句型
- 详解Python的切片(Slice)
- php正则表达式
- 使用hostAdminApp快速修改host