首页 > PC > 编程工具
leakcanary jar

leakcanary jar

大小:2.9MB
类别:编程工具
官方
免费
安全
纠错

检测到是安卓设备,电脑版软件不适合移动端

  • 简介
  • 相关教程
  • 相关合集
  • 评论
简介

leakcanary是一款十分适用的内存检测工具,这款压缩文件里边涵盖了leakcanary_resource.jar和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 包在这儿: Sonatypes 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_labelMyLeaks/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_leaks20/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

软件信息

软件标签:
软件版本:
更新时间:2025-05-28
软件大小:2.9MB
备案号:暂无
厂商:暂无
包名:暂无
应用权限:
查看
  • 程序写入外部存储

    -- 允许程序写入外部存储
  • 读取设备外部存储空间的文件

    -- 程序可以读取设备外部存储空间的文件
    -- 允许程序请求安装文件包
  • 获取额外的位置信息提供程序命令

    -- 允许程序访问额外的定位提供者指令
  • 访问SD卡文件系统

    -- 挂载、反挂载外部文件系统
  • 访问SD卡文件系统

    -- 挂载、反挂载外部文件系统
  • 查看WLAN连接

    -- 获取当前WiFi接入的状态以及WLAN热点的信息
  • 完全的网络访问权限

    -- 访问网络连接,可能产生GPRS流量
  • 连接WLAN网络和断开连接

    -- 改变WiFi状态
  • 修改系统设置

    -- 允许读写系统设置项
  • 查看网络连接

    -- 获取网络信息状态,如当前的网络连接是否有效
  • 收起
隐私说明:
查看
  • 我们严格遵守法律法规,遵循以下隐私保护原则,为您提供更加安全、可靠的服务:

  • 1、安全可靠:

    我们竭尽全力通过合理有效的信息安全技术及管理流程,防止您的信息泄露、损毁、丢失。
  • 2、自主选择:

    我们为您提供便利的信息管理选项,以便您做出合适的选择,管理您的个人信息
  • 3、保护通信秘密:

    我们严格遵照法律法规,保护您的通信秘密,为您提供安全的通信服务。
  • 4、合理必要:

    为了向您和其他用户提供更好的服务,我们仅收集必要的信息。
  • 5、清晰透明:

    我们努力使用简明易懂的表述,向您介绍隐私政策,以便您清晰地了解我们的信息处理方式。
  • 6、将隐私保护融入产品设计:

    我们在产品和服务研发、运营的各个环节,融入隐私保护的理念。
  • 本《隐私政策》主要向您说明:

    我们收集哪些信息 我们收集信息的用途 您所享有的权利
  • 希望您仔细阅读《隐私政策》

    为了让您有更好的体验、改善我们的服务或经您同意的其他用途,在符合相关法律法规的前提下,我们可能将通过某些服务所收集的信息用于我们的其他服务。例如,将您在使用我们某项服务时的信息,用于另一项服务中向您展示个性化的内容或广告、用于用户研究分析与统计等服务。
  • 若您使用服务,即表示您认同我们在本政策中所述内容。除另有约定外,本政策所用术语与《服务协议》中的术语具有相同的涵义。
  • 如您有问题,请联系我们。
  • 收起
类似软件
本类排行
近期大作

最新软件

相关合集 更多

相关教程

JAR是什么币种,初识JAR——区块链新贵的诞生 jar是什么格式? Win7系统双击打不开jar文件怎么办 魂斗罗共有多少代_求个手机单机动作游戏《魂斗罗3》破解JAR版,回忆一下...... qq游戏里3D桌球游戏怎么没有了,知道为什么吗_有好玩的手机单机体育台球游戏吗推荐个好玩的破解JAR版

热搜标签

网友评论

添加表情
评论
举报

举报反馈

  • 色情
  • 版权
  • 反动
  • 暴力
  • 软件失效
  • 其他原因
提交反馈