内存泄漏

  • leakcanary检测内存泄漏介绍
    • 内存泄露的概念
            当一个对象已经不再需要却无法被GC回收,就是内存泄露内存泄漏和内存溢出
    • 内存泄漏:水龙头漏水,一滴一滴
    • 内存溢出:盆接水,盆满了溢出,OOM
    • 为什会泄漏内:退出页面,对象没有被及时回收
    • 内存泄露的危害
      • “A small leak will sink a great ship.” - Benjamin Franklin
      •  千里之堤, 毁于蚁穴。 -- 《韩非子·喻老》
      •  对于移动设备来说,运行内存想极其有限的,分配给每个app的内存也是有上限的,虽然内存泄露不是必定会造成内存溢出,但是内存泄露的多了,那么剩余可用内存就少了,在某个时候是很有可能造成app运行卡顿以及内存溢出的。
    • 内存泄露是如何造成的     
      • 在Android中造成内存泄露的原因一般有一下几点:
      •  Activity或者Fragment使用了static成员变量
      • 使用Handler发送延时消息
      • 注册某个监听器对象后没有取消注册,比如广播接收者
      • 生命周期过长的异步任务,比如异步请求网络,此时Activity退出了
  • leakcanary集成依赖
    • 内存泄露的一般原因我们可能能够分析出来并会注意到,但是仍然有很多时候我们忽略掉。所以需要一些能够帮助我们检测到内存泄露的工具。而内存泄露的检测有很多工具,比如DDMS自带的Heap工具,MAT工具,但是这些工具的缺点就是使用步骤复杂,而且对内存泄露的定位没有LeakCanary精确,所以我们选择学习简单易用的LeakCanary类库。
    • 支付宝/设置/关于/版权信息:里面有开源项目leakcanary
    • 多使用开源项目:提供开发效率
    • 添加依赖:
    debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.5.4'
    releaseImplementation 'com.squareup.leakcanary:leakcanary-android-no-op:1.5.4'
    • 出现入口Application初始化

 

    public static RefWatcher getWatcher(Context context) {
        MyApplication ma = (MyApplication) context.getApplicationContext();
        return ma.watcher;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        ngyb = this;
        if (LeakCanary.isInAnalyzerProcess(this)) {
            return;
        }
        watcher = LeakCanary.install(this);
    }

 

  • leakcanary检测内存分析
    • 基类检测内存泄漏
        RefWatcher watcher = MyApplication.getWatcher(this);
        watcher.watch(this);
  •  在Debug模式下,当我们有某个对象内存泄露的时候,LeakCanary会显示一个通知,点击后可以查看更加详细的泄露信息。能定位到某个View造成的内存泄露。

 

 

  • leakcanary-单例导致的内存泄漏
    • leakcanary上线前分析内存,不能发布上线
      • 解决方案:应用上线不能出现leakcanary图标,没有leakcanary 吐司
    • 使用版本控制分支解决
      • 初始化git
        • git init
        • git add .
        • git commit -m "first commit"
      • 创建新的分支:专门用户集成leak项目
  • 内存泄漏产生原因
    • 不要过多使用static成员变量:基本数据类型可以static,对象数据类型不建议static 
    • Context不建议static,如果使用static指向application 
    • 数据库用完关闭 
    • Cursor使用完关闭 
    • 流使用完成关流

转载于:https://www.cnblogs.com/nangongyibin/p/10391127.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值