Android学习笔记--使用Universal-Image-Loaderf发生OOM到解决OOM问题

人生处万类,知识最为贤。这篇文章主要讲述Android学习笔记--使用Universal-Image-Loaderf发生OOM到解决OOM问题相关的知识,希望能为你提供帮助。
这里要引用一篇文章,http://blog.csdn.net/editor1994/article/details/50394560 非常不错的一篇分析OOM问题
【Android学习笔记--使用Universal-Image-Loaderf发生OOM到解决OOM问题】项目中加载了大量的图片使用完之后没有被释放,从而导致内存泄露,直到OOM,后来我使用上面文章使用到的方法发现是有效果,但是在一个界面多次频繁还是会出,于是万般无奈之下只能换了Glide图片加载框架,
自定义了一个GlideModule,
 

1 /** 2* Created by admin on 2017/4/7. 3*/ 4 5 public class GlideDemo implements GlideModule { 6@Override 7public void applyOptions(Context context, GlideBuilder builder) { 8builder.setMemoryCache(new LruResourceCache(2*1024*1024)); 9builder.setBitmapPool(new LruBitmapPool(2*1024*1024)); 10} 11 12@Override 13public void registerComponents(Context context, Glide glide) { 14 15} 16 }

加载图片时候的代码
1Glide.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代码
1timer = new Timer(); 2timerTask = new TimerTask() { 3@Override 4public void run() { 5//应用程序最大可用内存 6int maxMemory = ((int) Runtime.getRuntime().maxMemory())/1024/1024; 7//应用程序已获得内存 8long totalMemory = ((int) Runtime.getRuntime().totalMemory())/1024/1024; 9//应用程序已获得内存中未使用内存 10long freeMemory = ((int) Runtime.getRuntime().freeMemory())/1024/1024; 11Sysout.println("我---> 应用内存="+maxMemory+"M,以及使用的="+totalMemory+"M,剩下的="+freeMemory+"M"); 12if(totalMemory > 58){ 13// Toast.makeText(NeiCunService.this, "程序异常,正在重启,请稍后", Toast.LENGTH_SHORT).show(); 14context.sendBroadcast(new Intent("com.zhushiyun.oom")); 15// System.exit(0); 16//timer.cancel(); 17} 18} 19}; 20timer.schedule(timerTask,1000,5000); 21Sysout.println("我是监控内容的我已经启动");

 

    推荐阅读