Android中内存泄漏的原因及消除内存泄漏的方法
来源:互联网 发布:中国吸血鬼网络剧 编辑:程序博客网 时间:2024/05/17 01:02
一.Java内存泄漏引起的原因:
简单的说就是该被释放的对象没有被释放,一直被某个或某些实例持有却不再使用导致GC不能回收。
1.资源未关闭
2.静态成员变量持有类的引用;
3.非静态内部类持有外部类的应用,使用非静态内部类创建静态变量;
4.单例引起内存泄漏;
5.线程生命周期不可控;
6.handler尽量使用静态,handler中looper存在整个activity周期,其内部messager持有handler引用,而handler又持有内的引用。
二.解决内存泄漏的方法:
1.使用LeakCanary检测内存泄漏:
首先在项目的build.gradle里配置的依赖dependncies中引入leakcanary的依赖
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2' testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'其次,在项目中的BaseApplication中加载
public class BaseApplication extends Application { private RefWatcher refWatcher; public static RefWatcher getRefWatcher(Context context) { BaseApplication application = (BaseApplication) context.getApplicationContext(); return application.refWatcher; } @Override public void onCreate() { super.onCreate(); refWatcher = LeakCanary.install(this); } }最后,自定义activity、framgment在Destroy方法中进行内存泄漏的检测
public class LeakActivity extends Activity { @Override protected void onDestroy() { super.onDestroy(); RefWatcher watcher = BaseApplication.getRefWatcher(this); watcher.watch(this); } }
public class LeakActivity extends Activity { @Override protected void onDestroy() { super.onDestroy(); RefWatcher watcher = BaseApplication.getRefWatcher(this); watcher.watch(this); } }
2.使用DDSM工具:
1.在android studio中打开ddms,选中要检测项目的包名->点击ddms左上角小蓝桶->Cause GC
2.检测结果导出成hprof文件
3.将hprof-conv.exe上一步的结果转换
使用mat打开转换结果。
0 0
- Android中内存泄漏的原因及消除内存泄漏的方法
- Android 内存泄漏的原因及解决
- Android中内存泄漏的发生原因及优化
- Android 中内存泄漏的原因分析及解决方案
- Android 中内存泄漏的原因分析及解决方案
- Android 内存泄漏的原因
- android内存泄漏的原因
- Android 内存泄漏的原因
- 内存泄漏 的原因
- 内存泄漏的原因
- Android中常见的内存泄漏分析及应对方法
- Java中关于内存泄漏出现的原因汇总及如何避免内存泄漏
- android--内存泄漏的原因及相关分析
- android开发中单例造成的内存泄漏原因及解决方案
- Android内存泄漏的几个原因
- Android内存泄漏的各种原因详解
- Android内存泄漏的几个原因
- Android内存泄漏的各种原因详解
- redis主从复制
- Python购物车系统模拟1
- Meisell-Lehmer算法(求1...n范围内的素数个数)
- 命名管道的通信方式
- Java编程思想-16数组
- Android中内存泄漏的原因及消除内存泄漏的方法
- ViewPager实现广告条自动滑动
- 自定义控件之Paint的使用
- 即拿即用-App启动优化最佳实践
- EXCLE.随笔
- 349. Intersection of Two Arrays --双指针、字典、二分查找、集合
- 自定义View继承现有的Toast,实现订单提醒的Toast,从左下角显示然后退出
- 自定义Dialog
- 伯努利分布、二项分布、多项分布、Beta分布、Dirichlet分布、连续分布(正态分布)、大数定理、中心极限定理、贝叶斯理论