zoukankan      html  css  js  c++  java
  • 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("我是监控内容的我已经启动");
  • 相关阅读:
    python操作redis
    python正则表达式-案例
    hive序列化和反序列化serde
    python配置文件
    Java写入的常用技巧
    Java从string数组创建临时文件
    Java官方操纵byte数组的方式
    python实例方法、静态方法和类方法
    ast.literal_eval(转)
    impala学习笔记
  • 原文地址:https://www.cnblogs.com/langfei8818/p/6688166.html
Copyright © 2011-2022 走看看