首页 > 代码库 > 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问题