LeakCanary 2:是否需要手动观察对象?

LeakCanary 2: Does one manually have to watch objects?

我刚刚将 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 没有向我报告任何问题,但我怀疑我所做的一切是否完美。

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

That’s it, there is no code change needed! You can confirm that LeakCanary is running on startup by filtering on the LeakCanary tag in Logcat:

D LeakCanary: Installing AppWatcher

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

是也不是。

是的,它会自动检测泄漏的 ActivityFragmentFragment 视图(从 Fragment 的 onCreateView 方法返回的 View),以及ViewModel 个实例(根据 AndroidXFragmentDestroyWatcherdocs for Config and the source),无需手动观察这些对象。

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

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