leakcanary jar
发表评论
- 软件类别:编程辅助
- 软件大小:2.88 MB
- 更新时间:2017-06-01 11:14
- 软件版本:
- 软件语言:中文
- 软件等级:
- 官方网址:暂无
评分:
好评:0
差评:0


软件介绍
leakcanary是一款非常实用的内存检测工具,这款压缩包里面包含了leakcanary_resource.jar和leakcanary.jar.一个是包含源代码的一个是没有包含源代码的!有需要的快点来it猫扑下载吧!

leakcanary jar介绍
Android 和 java 内存泄露检测。
“A small leak will sink a great ship.” - Benjamin Franklin
千里之堤, 毁于蚁穴。 -- 《韩非子·喻老》
为什么需要使用 LeakCanary?
问得好,看这个文章LeakCanary: 让内存泄露无所遁形
如何使用
使用 RefWatcher 监控那些本该被回收的对象。
RefWatcher refWatcher = {...};
// 监控
refWatcher.watch(schrodingerCat);
LeakCanary.install() 会返回一个预定义的 RefWatcher,同时也会启用一个 ActivityRefWatcher,用于自动监控调用 Activity.onDestroy() 之后泄露的 activity。
public class ExampleApplication extends Application {
public static RefWatcher getRefWatcher(Context context) {
ExampleApplication application = (ExampleApplication) context.getApplicationContext();
return application.refWatcher;
}
private RefWatcher refWatcher;
@Override public void onCreate() {
super.onCreate();
refWatcher = LeakCanary.install(this);
}
}
使用 RefWatcher 监控 Fragment:
public abstract class BaseFragment extends Fragment {
@Override public void onDestroy() {
super.onDestroy();
RefWatcher refWatcher = ExampleApplication.getRefWatcher(getActivity());
refWatcher.watch(this);
}
}
工作机制
RefWatcher.watch() 创建一个 KeyedWeakReference 到要被监控的对象。
然后在后台线程检查引用是否被清除,如果没有,调用GC。
如果引用还是未被清除,把 heap 内存 dump 到 APP 对应的文件系统中的一个 .hprof 文件中。
在另外一个进程中的 HeapAnalyzerService 有一个 HeapAnalyzer 使用HAHA 解析这个文件。
得益于唯一的 reference key, HeapAnalyzer 找到 KeyedWeakReference,定位内存泄露。
HeapAnalyzer 计算 到 GC roots 的最短强引用路径,并确定是否是泄露。如果是的话,建立导致泄露的引用链。
引用链传递到 APP 进程中的 DisplayLeakService, 并以通知的形式展示出来。
如何复制 leak trace?
在 Logcat 中,你可以看到类似这样的 leak trace:
In com.example.leakcanary:1.0:1 com.example.leakcanary.MainActivity has leaked:
* GC ROOT thread java.lang.Thread.<Java Local> (named 'AsyncTask #1')
* references com.example.leakcanary.MainActivity$3.this$0 (anonymous class extends android.os.AsyncTask)
* leaks com.example.leakcanary.MainActivity instance
* Reference Key: e71f3bf5-d786-4145-8539-584afaecad1d
* Device: Genymotion generic Google Nexus 6 - 5.1.0 - API 22 - 1440x2560 vbox86p
* Android Version: 5.1 API: 22
* Durations: watch=5086ms, gc=110ms, heap dump=435ms, analysis=2086ms
你甚至可以通过分享按钮把这些东西分享出去。
SDK 导致的内存泄露
随着时间的推移,很多SDK 和厂商 ROM 中的内存泄露问题已经被尽快修复了。但是,当这样的问题发生时,一般的开发者能做的事情很有限。
LeakCanary 有一个已知问题的忽略列表,AndroidExcludedRefs.java,如果你发现了一个新的问题,请提一个 issue 并附上 leak trace, reference key, 机器型号和 SDK 版本。如果可以附带上 dump 文件的 链接那就再好不过了。
对于最新发布的 Android,这点尤其重要。你有机会在帮助在早期发现新的内存泄露,这对整个 Android 社区都有极大的益处。
开发版本的 Snapshots 包在这里: Sonatype's snapshots repository。
leak trace 之外
有时,leak trace 不够,你需要通过 MAT 或者 YourKit 深挖 dump 文件。
通过以下方法,你能找到问题所在:
查找所有的 com.squareup.leakcanary.KeyedWeakReference 实例。
检查 key 字段
Find the KeyedWeakReference that has a key field equal to the reference key reported by LeakCanary.
找到 key 和 和 logcat 输出的 key 值一样的 KeyedWeakReference。
referent 字段对应的就是泄露的对象。
剩下的,就是动手修复了。最好是检查到 GC root 的最短强引用路径开始。
自定义UI 样式
DisplayLeakActivity 有一个默认的图标和标签,你只要在你自己的 APP 资源中,替换以下资源就可。
res/
drawable-hdpi/
__leak_canary_icon.png
drawable-mdpi/
__leak_canary_icon.png
drawable-xhdpi/
__leak_canary_icon.png
drawable-xxhdpi/
__leak_canary_icon.png
drawable-xxxhdpi/
__leak_canary_icon.png
<?xml version=&1.0& encoding=&utf-8&?>
<resources>
<string name=&__leak_canary_display_activity_label&>MyLeaks</string>
</resources>
保存 leak trace
DisplayLeakActivity saves up to 7 heap dumps & leak traces in the app directory. You can change that number by providing R.integer.__leak_canary_max_stored_leaks in your app:
在 APP 的目录中,DisplayLeakActivity 保存了 7 个 dump 文件和 leak trace。你可以在你的 APP 中,定义 R.integer.__leak_canary_max_stored_leaks 来覆盖类库的默认值。
<?xml version=&1.0& encoding=&utf-8&?>
<resources>
<integer name=&__leak_canary_max_stored_leaks&>20</integer>
</resources>
上传 leak trace 到服务器
你可以改变处理完成的默认行为,将 leak trace 和 heap dump 上传到你的服务器以便统计分析。
创建一个 LeakUploadService, 最简单的就是继承 DisplayLeakService :
public class LeakUploadService extends DisplayLeakService {
@Override
protected void afterDefaultHandling(HeapDump heapDump, AnalysisResult result, String leakInfo) {
if (!result.leakFound || result.excludedLeak) {
return;
}
myServer.uploadLeakBlocking(heapDump.heapDumpFile, leakInfo);
}
}
请确认 release 版本 使用 RefWatcher.DISABLED:
public class ExampleApplication extends Application {
public static RefWatcher getRefWatcher(Context context) {
ExampleApplication application = (ExampleApplication) context.getApplicationContext();
return application.refWatcher;
}
private RefWatcher refWatcher;
@Override public void onCreate() {
super.onCreate();
refWatcher = installLeakCanary();
}
protected RefWatcher installLeakCanary() {
return RefWatcher.DISABLED;
}
}
自定义 RefWatcher:
public class DebugExampleApplication extends ExampleApplication {
protected RefWatcher installLeakCanary() {
return LeakCanary.install(app, LeakUploadService.class);
}
}
别忘了注册 service:
<?xml version=&1.0& encoding=&utf-8&?>
<manifest xmlns:android=&http://schemas.android.com/apk/res/android&
xmlns:tools=&http://schemas.android.com/tools&
>
<application android:name=&com.example.DebugExampleApplication&>
<service android:name=&com.example.LeakUploadService& />
</application>
</manifest>
多平台下载
Pc版leakcanary jar
猜你喜欢
内存检测工具

内存检测工具
内存检测工具可以用以检测一些内存条,内存卡的测试,一般用于内存卡性能测试,比如内存条速度测试,颗粒检测等等,下面是分享的内存检测工具大全,应该有你需要的...
本类最新
Trae电脑版2.10.0
微软.NET Frameworkv4.7.2.0 官方完整版
大漠插件中文汉化模块源码免费版
ApiPost(api调试)v7.0.2 官方版
x64dbg调试工具v2022.08.08 绿色汉化版
Spire.Doc for Javav2.7.3 免费版
SDK Platform Tools for windowsv33.0.1 官方最新版
Postman安装包64位版v9.15.2 官方版
.net程序反编译软件中文版(DotNet Helper)v2.2 绿色版
.net混淆器汉化版(dotNET Reactor)v5.9.8.0 绿色版
.NET代码保护工具.NET Reactorv5.9.8.0 中文汉化版
开源脱壳工具.Net Reactor Slayerv3.0.0.0 中文免费版
鲸鱼无线模块编程PC电脑版v1.0.3 官方最新版
x64dbg辅助管理器v2022.02.25 汉化优化安装版
JDK绿色免安装版附JAVA环境变量一键配置v1.8.0.151 官方版
相关软件
腾讯二八杠v1.0腾讯二八杠是腾讯游戏旗下的麻将手游,进军二八杠领域,使用qq账号即可登录,强大的反作弊系统保证绝无外挂.感兴趣的朋友快来IT猫扑下载吧.腾讯二八杠游戏介绍:二八杠游戏,又称疯狂牌九,是利用中国传统游戏麻将中单一色
梦想召唤王2v1.1.21.17梦想召唤王2安卓版是一款根据同名动漫改编而来的战斗手游,游戏画面精致,人物形象Q萌可爱,非常适合儿童下载试玩,可以培养孩子的独立思考能力和想象力,感兴趣的玩家赶快来IT猫扑下载体验吧!游戏介绍《梦想召唤王2》是腾讯自
天堂之刃手游v3.7.1天堂之刃手游是一款特别好玩的角色扮演类型的手游,这款游戏画面精美,众多英雄集合一起大乱斗,让玩家畅快玩耍!超高清画质,绝对劲爆您的眼球!快来it猫扑下载吧!天堂之刃手游介绍《天堂之刃》是一款欧美魔幻题材的暗黑
魔力填色抖音游戏v1.0.4魔力填色抖音游戏是一款极为有趣的填色游戏,玩家可以在游戏里给一些图案填色,随着关卡的上身,图案的复杂程度也会越来越高,玩家需要耐心的一个一个区域的选择相应的颜色进行填充,感兴趣的朋友点击下载游玩吧游戏优势【操作
下载排行
- 1jstl-1.2.jar包
- 2SDK Platform Tools for windows
- 3Android Studio 3.4中文补丁
- 4易语言vc98linker
- 5fastreport中文版(报表控件)
- 6fpwin pro7中文手册
- 7VOFA+软件32位/64位
- 8postman接口测试linux版
- 9Device Tree设备堆栈查看工具
- 10Visual Assist X(vc编程辅助工具)








JSCompress(JS脚本代码压缩)
GCViewer(GC日志分析工具)











网友评论
查看所有0条评论