App 内存应用的内存泄露检测及应用中哪个方法耗时的检测
来源:互联网 发布:黑客技术软件网盘 编辑:程序博客网 时间:2024/05/21 15:02
App 内存应用的内存泄露检测及应用中哪个方法耗时的检测
导致内存泄漏常见情况:
1.静态变量的使用(静态变量直接或间接地引用了Activity对象就会造成内存泄漏)
2.Activity定义成了静态变量
3.Activity中使用了静态的 View (View 会持有Activity的对象引用)
4.ImageSpan引用了 Activity Context
5.单例引用了 Activity Context
6.线程(包括 AsyncTask)的使用:Activity 退出后线程还在运行, 并且线程中使用了Activity或View对象;
7.Handler 对象的使用: Activity退出后 Handle r仍有消息要处理;
8.广播接收者没有注销;服务没有解绑;游标关闭,流关闭
9.在Activity中创建了非静态内部类(内部类中直接或间接引用到了Activity)的静态变量
10.静态集合保存的对象没有及时清除;(LeakCanary 分析不了,使用 DDMS 及 MAT)
1.静态变量的使用(静态变量直接或间接地引用了Activity对象就会造成内存泄漏)
2.Activity定义成了静态变量
3.Activity中使用了静态的 View (View 会持有Activity的对象引用)
4.ImageSpan引用了 Activity Context
5.单例引用了 Activity Context
6.线程(包括 AsyncTask)的使用:Activity 退出后线程还在运行, 并且线程中使用了Activity或View对象;
7.Handler 对象的使用: Activity退出后 Handle r仍有消息要处理;
8.广播接收者没有注销;服务没有解绑;游标关闭,流关闭
9.在Activity中创建了非静态内部类(内部类中直接或间接引用到了Activity)的静态变量
10.静态集合保存的对象没有及时清除;(LeakCanary 分析不了,使用 DDMS 及 MAT)
内存泄露检擦
1.使用第三方开源项目 LeakCanary
使用方式
添加依赖:
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
Application中初始化:
public class ExampleApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
public void onCreate() {
super.onCreate();
// 初始化 LeakCanary
if (LeakCanary.isInAnalyzerProcess(this)) {
return;
}
LeakCanary.install(this);
if (LeakCanary.isInAnalyzerProcess(this)) {
return;
}
LeakCanary.install(this);
// Normal app init code...
}
}
}
}
2.通过 DDMS 和 MAT 工具分析,操作步骤如下:
内存泄露在 “静态集合保存的对象没有及时清除” 该情况时,使用 LeakCanary 检擦不出,得用 DDMS 和 MAT 工具分析。
通过 DDMS(或者 AS 的 monitor -> memery 窗口)发现问题:通过 AS 中的 Monitor 窗口进行分析,查看内存分配情况,如果操作应用时内存一直往上涨说明可能存在内存泄漏。
通过MAT定位问题: 使用 Memory Analyzer tool(MAT)
用法:
1.点击 update Heap(左上角 第二个按钮,虫子右边)。
2.点击 Heap。
3.打开你要检测的应用,然后不停地折腾(一个界面一个界面的测试),偶尔点 Cause GC 一下
4.测试了一段时间,自己感觉差不多后,导出 .hprof 文件(点击左上角第三个按钮:dump HPROF file),
然后在该文件目录下打开 dos 窗口,输入 hprof-conv a.hprof b.hprof 命令对 hprof文件进行处理, 再用 MAT 打开该文件进行分析。
通过 DDMS(或者 AS 的 monitor -> memery 窗口)发现问题:通过 AS 中的 Monitor 窗口进行分析,查看内存分配情况,如果操作应用时内存一直往上涨说明可能存在内存泄漏。
通过MAT定位问题: 使用 Memory Analyzer tool(MAT)
用法:
1.点击 update Heap(左上角 第二个按钮,虫子右边)。
2.点击 Heap。
3.打开你要检测的应用,然后不停地折腾(一个界面一个界面的测试),偶尔点 Cause GC 一下
4.测试了一段时间,自己感觉差不多后,导出 .hprof 文件(点击左上角第三个按钮:dump HPROF file),
然后在该文件目录下打开 dos 窗口,输入 hprof-conv a.hprof b.hprof 命令对 hprof文件进行处理, 再用 MAT 打开该文件进行分析。
优化性能:
使用 TraceView 对性能分析
TraceView: ddms中的一个分析工具,使用方式 start method profiling 开始跟踪 stop method profiliing 结束跟踪,
按方法调用消耗时间的降序排列,分析耗时较多的方法是否有优化的空间;
使用 TraceView 对性能分析
TraceView: ddms中的一个分析工具,使用方式 start method profiling 开始跟踪 stop method profiliing 结束跟踪,
按方法调用消耗时间的降序排列,分析耗时较多的方法是否有优化的空间;
阅读全文
0 0
- App 内存应用的内存泄露检测及应用中哪个方法耗时的检测
- 检测内存泄露的方法:
- 内存泄露的检测方法
- 检测内存泄露的方法
- C/C++中内存释放及内存泄露的检测
- linux C内存泄露检测实现及内存泄露检测的一般方法
- linux C内存泄露检测实现及内存泄露检测的一般方法
- 内存泄露及检测方法
- 内存泄露的检测
- 内存泄露的检测
- android应用开发详解(五)--------------内存泄露的检测
- 使用开源项目LeakCanary检测应用的内存泄露
- 使用Leak Canary检测应用的内存泄露
- VC++检测内存泄露的方法
- VS 2013内存泄露检测的方法
- C++内存泄露的检测识别方法
- C/C++中检测内存泄露的方法
- VC中检测内存泄露的代码
- Windows下用at命令编写简单的计划任务
- 【GDOI2018模拟9.21】数列
- Git 的使用及常用命令的使用
- Linux音视频(V4L2运行原理)
- mysql与mysqli的区别
- App 内存应用的内存泄露检测及应用中哪个方法耗时的检测
- js学习---无缝滚动
- CI框架分页类及其实现
- Win10如何自定义右键菜单-修改注册表(图文)
- HDU1255 覆盖的面积 (线段树求面积交)
- 删除链表中重复的元素
- POJ1113 计算几何--整形凸包模板周长
- Android小控件之模糊匹配
- 【Python-3.3】字典中存储列表