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("我是监控内容的我已经启动");
  • 相关阅读:
    编程风格与注意事项(一)
    BB-Black 初体验之远程控制篇
    我的BB-Black之旅……(一)
    等精度频率计设计中的猫腻
    Linux查看物理CPU个数、核数、逻辑CPU个数、Cpu型号
    基于TransportClient的elasticsearch(es)消费kafka数据---Java程序设计
    elasticsearch概述
    HBase 性能优化笔记
    hive1.2.1搭建遇到的问题
    Hbase的表设计
  • 原文地址:https://www.cnblogs.com/langfei8818/p/6688166.html
Copyright © 2011-2022 走看看