首页 > 代码库 > Android学习笔记--使用Universal-Image-Loaderf发生OOM到解决OOM问题
Android学习笔记--使用Universal-Image-Loaderf发生OOM到解决OOM问题
这里要引用一篇文章,http://blog.csdn.net/editor1994/article/details/50394560 非常不错的一篇分析OOM问题
项目中加载了大量的图片使用完之后没有被释放,从而导致内存泄露,直到OOM,后来我使用上面文章使用到的方法发现是有效果,但是在一个界面多次频繁还是会出,于是万般无奈之下只能换了Glide图片加载框架,
自定义了一个GlideModule,
1 /** 2 * Created by admin on 2017/4/7. 3 */ 4 5 public class GlideDemo implements GlideModule { 6 @Override 7 public void applyOptions(Context context, GlideBuilder builder) { 8 builder.setMemoryCache(new LruResourceCache(2*1024*1024)); 9 builder.setBitmapPool(new LruBitmapPool(2*1024*1024)); 10 } 11 12 @Override 13 public void registerComponents(Context context, Glide glide) { 14 15 } 16 }
加载图片时候的代码
1 Glide.with(lYActivity.this) 2 .load(arrayList.get(position).getBigimg()) 3 .error(R.drawable.mimg) 4 .skipMemoryCache(false) 5 .diskCacheStrategy(DiskCacheStrategy.ALL) 6 .into(mImage);
目前问题算是解决了,后续在补充,还有启动一个Server,实时监听内存的使用情况,如果内存快要超出指定的内存,强制返回主页并且释放资源
监听内存的Service代码
1 timer = new Timer(); 2 timerTask = new TimerTask() { 3 @Override 4 public void run() { 5 //应用程序最大可用内存 6 int maxMemory = ((int) Runtime.getRuntime().maxMemory())/1024/1024; 7 //应用程序已获得内存 8 long totalMemory = ((int) Runtime.getRuntime().totalMemory())/1024/1024; 9 //应用程序已获得内存中未使用内存 10 long freeMemory = ((int) Runtime.getRuntime().freeMemory())/1024/1024; 11 Sysout.println("我---> 应用内存="+maxMemory+"M,以及使用的="+totalMemory+"M,剩下的="+freeMemory+"M"); 12 if(totalMemory > 58){ 13 // Toast.makeText(NeiCunService.this, "程序异常,正在重启,请稍后", Toast.LENGTH_SHORT).show(); 14 context.sendBroadcast(new Intent("com.zhushiyun.oom")); 15 // System.exit(0); 16 //timer.cancel(); 17 } 18 } 19 }; 20 timer.schedule(timerTask,1000,5000); 21 Sysout.println("我是监控内容的我已经启动");
Android学习笔记--使用Universal-Image-Loaderf发生OOM到解决OOM问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。