欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

记关于内存泄漏的理解与学习

程序员文章站 2022-05-06 12:34:55
...

内存泄漏工具:LeakCancary,在app的build.gradle下引入,除此之外该版本不需要添加其他代码

使用文档:https://square.github.io/leakcanary/

debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.0-beta-3'

目前我常见的内存泄漏

1、handler隐性持有activity

2、Runnable隐性持有activity

3、Thread隐性持有activity

4、Toast.make( context,“弹出内容”,Toast.LENGTH_SHORT).show;

5、封装类的调用,持有 context / activity

6、静态变量持有context / activity

解决方案(上下一一对应)

  • 1:MyHandler继承Handler 对传入值进行弱引用,myHandler置静态,在onDestory()中记得手动销毁myHandler

记关于内存泄漏的理解与学习

  • 2,3:写一个内部静态类继承Thread / Runnable进行使用
  • 4,5-a: 如果只需要用到context,传入context.getApplicationContext()即可
  • 5-b: 一定需要activity而非context,传入activity后,在封装类中对activity采用弱引用 

WeakReferencr<Activity> reference = new WeakReferencr<Activity>(传入的activity);

Activity activity = reference.get();