Android 内存泄漏(一)

最近接到一个新活,优化OOM,好吧,万恶的OOM,这个玩意压根就是虚无的,有一些思路正在做,大概从几个方面思考问题。

  1. 图片的加载以及回收
  2. 内存泄漏
  3. Assets 等的内存问题
    所以,首先从比较好着手的内存泄漏开刀。内存泄漏,要搞明白一点,啥叫内存泄漏 ????????
    DEFINE : 我的理解是内存的回收不及时。说白了就是内存该换不换。这个尤其是在C 中常见哈,就是万恶的指针哈哈哈。。。。。。。。。。。。。

Android内存泄漏常见的点是:

  1. Handler持有Activity引用
  2. 单例持有Activity
  3. Assets 不回收导致内存泄漏
  4. WebView 使用不当导致内存泄漏

Handler 持有Activity的引用分析

   首先这个玩意要分析Activity的源码,Handler作为Message的分发器,与Looper一起,循环分发Message,所以就有非常实际的问题。
   Looper是一个单例模式,其在一个进程初始化的时候创建,当Handler post 一个delayed runnable 的时候,如果Runnable 在Activity finish 之前仍然没有执行,就有可能造成Activity的临时泄漏或者泄露。
   泄露示意如图:

这里写图片描述

解决办法:
1.办法很简单,在Actvity onDestroy 的时候 remove the runnable
2.把Handler变成一个静态类,解决办法如下:

 static  class H extends Handler{
        WeakReference<Activity> ref;
        public H(WeakReference<Activity> ref){
            this.ref = ref;
        }

        @Override
        public void dispatchMessage(Message msg) {
            super.dispatchMessage(msg);
            if (ref.get()!=null){
                // case match 
                ref.get().doSomething();
            }
        }
    }

未完待续

猜你喜欢

转载自blog.csdn.net/gezihau/article/details/53485699