【问题标题】:LeakCanary 2: Does one manually have to watch objects?LeakCanary 2:是否必须手动观看对象?
【发布时间】:2020-03-22 17:24:36
【问题描述】:

我刚刚将 Leak Canary 2 添加到我的应用程序 build.gradle,如 official docs 中所述:

dependencies {
  // debugImplementation because LeakCanary should only run in debug builds.
  debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.2'
}

现在,当我运行我的应用程序并检查 logcat 时,我可以找到

2020-03-22 18:20:31.858 2401-2401/? D/LeakCanary: Installing AppWatcher

所以安装成功了。

但这就是我需要的一切吗?还是我还必须使用AppWatcher.objectWatcher.watch 手动观察对象?我不清楚。目前 LeakCanary 没有向我报告任何问题,但我怀疑我所做的一切都是完美的。

【问题讨论】:

标签: android memory-leaks leakcanary


【解决方案1】:

是和不是。

是的,它会自动检测泄露的ActivityFragmentFragment 视图(从 Fragment 的 onCreateView 方法返回的 View)和 ViewModel 实例(根据 docs for @ 987654331@ 和 source for AndroidXFragmentDestroyWatcher),无需手动查看这些对象。

不,它不会自动检测任何其他对象的泄漏实例。对于那些,您需要手动观看它们。例如,文档中的 recipe 描述了如何让 LeakCanary 监视泄露的 Service 实例。

另请注意,如果应用可见,则在检测到 5 个保留对象之前,它不会触发堆转储。将应用程序置于后台会立即触发转储,但同时会显示通知(docs)

【讨论】:

    【解决方案2】:

    确实如此!或者根据文档,就是这样!

    就是这样,无需更改代码!你可以确认 LeakCanary 通过过滤 LeakCanary 标签在启动时运行 日志猫:

    D LeakCanary: Installing AppWatcher

    我在生产项目中使用过 LeakCanary(在开发期间)。在启用 LC 的情况下使用该应用一段时间后,您将收到一条显示使用结果的通知。如果您错过了该通知,则可以从应用快捷方式菜单中打开 泄漏活动

    【讨论】:

    • 谢谢!你能解释一下如何访问泄漏活动吗?应用快捷方式菜单是什么意思?
    • 它将显示为通知,或者如果您按住应用程序快捷方式(启动器图标)打开快捷方式菜单,您可以通过这种方式打开泄漏金丝雀。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 2017-11-20
    • 2021-04-01
    • 2012-12-23
    • 1970-01-01
    相关资源
    最近更新 更多