Android内存泄露实时监测——LeakCanary/MAT等(Android Studio+Eclipse),测试
2016-07-24 10:40
423 查看
Android自带的SysTrace与TraceView性能分析工具
> 性能检测和监测:
AndroidPerformanceMonitor - https://github.com/markzhai/AndroidPerformanceMonitor
Watchdog - https://github.com/wojteklu/Watchdog
> 内存泄露LeakCanary,网易的Emmage测试框架,MAT,自动化框架
MAT(内存分析工具)-- http://www.eclipse.org/mat/downloads.php
LeakCanary已经开源一年多了,版本从1.3已经升级到1.4-beta2,不过还是有朋友没有试过使用。源码地址:https://github.com/square/leakcanary
推荐看:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0510/2860.html
当初也是看这篇才了解LeakCanary。这里再具体将使用步骤简单重现(Android Studio)。
LeakCanary使用步骤
1、新开一个Android Studio工程;
2、在app的build.gradle中加上下面代码片段的最后两行。
释义:
(1)添加完成后,再Build-Clean Project,即可同步远程依赖到本地,在External Libraries中可以看到同步到本地的leakcanary的jar包;
(2)debugCompile是配置在debug模式下可用。releaseCompile配置主要是为了不修改代码,在release模式下LeakCanary不显示。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
}
3、因为LeakCanary需要传递一个Application的对象,因此你需要有一个自定义的Application,比如MyApplication。如下:
package com.example.testproject;
import android.app.Application;
import com.squareup.leakcanary.LeakCanary;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
在AndroidManifest中,别忘记将Application名改为MyApplication。
现在,已经配置完成了。你已经可以使用了。
做个测试:
package com.example.testproject;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn =(Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
doSome();
}
});
}
public void doSome(){
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(20*1000);
}
}).start();
}
}
运行代码,转屏,即可看到通知栏的LeakCanary通知。
如果eclipse的用户,可以参考:https://github.com/cheyiliu/leakcanary/tree/leakcannary_eclipse_project
> Android主流开源自动化框架--http://xfenglin.com/a/12007046245.html
> 性能检测和监测:
AndroidPerformanceMonitor - https://github.com/markzhai/AndroidPerformanceMonitor
Watchdog - https://github.com/wojteklu/Watchdog
> 内存泄露LeakCanary,网易的Emmage测试框架,MAT,自动化框架
MAT(内存分析工具)-- http://www.eclipse.org/mat/downloads.php
LeakCanary已经开源一年多了,版本从1.3已经升级到1.4-beta2,不过还是有朋友没有试过使用。源码地址:https://github.com/square/leakcanary
推荐看:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2015/0510/2860.html
当初也是看这篇才了解LeakCanary。这里再具体将使用步骤简单重现(Android Studio)。
LeakCanary使用步骤
1、新开一个Android Studio工程;
2、在app的build.gradle中加上下面代码片段的最后两行。
释义:
(1)添加完成后,再Build-Clean Project,即可同步远程依赖到本地,在External Libraries中可以看到同步到本地的leakcanary的jar包;
(2)debugCompile是配置在debug模式下可用。releaseCompile配置主要是为了不修改代码,在release模式下LeakCanary不显示。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:24.1.1'
debugCompile 'com.squareup.leakcanary:leakcanary-android:1.4-beta2'
releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.4-beta2'
}
3、因为LeakCanary需要传递一个Application的对象,因此你需要有一个自定义的Application,比如MyApplication。如下:
package com.example.testproject;
import android.app.Application;
import com.squareup.leakcanary.LeakCanary;
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
LeakCanary.install(this);
}
}
在AndroidManifest中,别忘记将Application名改为MyApplication。
现在,已经配置完成了。你已经可以使用了。
做个测试:
package com.example.testproject;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn =(Button)findViewById(R.id.button);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
doSome();
}
});
}
public void doSome(){
new Thread(new Runnable() {
@Override
public void run() {
SystemClock.sleep(20*1000);
}
}).start();
}
}
运行代码,转屏,即可看到通知栏的LeakCanary通知。
如果eclipse的用户,可以参考:https://github.com/cheyiliu/leakcanary/tree/leakcannary_eclipse_project
> Android主流开源自动化框架--http://xfenglin.com/a/12007046245.html
相关文章推荐
- jsp页面的s标签中应用java的静态变量
- eclipse反编译插件jad环境配置
- Eclipse配置初始化(自用)
- Java单例模式-volatile与synchronized的使用
- java基础学习(7)浅析final,private,public,protected,static等关键以及它们的区别的联系
- JavaMail 简单发送邮件
- 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法
- eclipse、myeclipse 反编译插件 轻松查看源代码
- 深入理解JAVA I/O系列四:RandomAccessFile
- Java千百问_09基础类库(004)_java.lang.management包有什么功能
- java实现文字版P图
- spring,springmvc,mybatis整合开发时报的异常:Servlet.init() for servlet springMvc threw exc
- 解决jdk环境变量设置完后,在cmd中运行javac出现’javac‘不是内部或外部命令,也不是可运行的程序或批处理文件的错误提示
- java多线程之定时器Timer
- Java 返回一个整数的各个数字之和的一种方法
- java疯狂总结2
- Java堆、栈、方法区的简单分析
- thingking in java test2.11练习(6)
- 【Java】面向对象(二)继承
- Java集合框架(三)day_17