Android 内存泄漏(一)

本文探讨了优化Out of Memory (OOM) 的策略,重点关注解决内存泄漏问题。文章分析了Android中常见的内存泄漏原因,例如Handler持有Activity引用,并提出了具体的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近接到一个新活,优化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();
            }
        }
    }

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值