首页 > 解决方案 > 如何在我的java类中使用leakcanary.AppWatcher?

问题描述

我正在尝试使用 LeakCanary 在我的 Android 应用程序中检测我的服务类中的泄漏,并查看以下配方:

https://square.github.io/leakcanary/recipes/#watching-objects-with-a-lifecycle

它正在调用 AppWatcher.objectWatcher.watch() 来 wath Service 类,我也想做同样的事情。从我的代码中,我需要访问 AppWatcher 对象,但是构建失败。(“包leakcanary.AppWatcher不存在”等)

import com.squareup.leakcanary.AppWatcher;

或者

import leakcanary.AppWatcher;

我已经将我的 bazle 设置配置为在我的依赖项中包含以下内容:

"com.squareup.leakcanary:leakcanary-android:aar:2.4"
"com.squareup.leakcanary:leakcanary-object-watcher-android:aar:2.4"

而且,根据 logcat 日志,当我启动我的活动时,LeakCanary 实例被成功调用。(所以,库依赖本身已经可以了,我应该能够从我的 java 代码中访问 AppWatcher 单例来监视我的服务吗?)

标签: androidleakcanary

解决方案


看起来下面的编译没有错误,并且似乎调用了 watch() 函数(在 logcat 中,LeakCanary 说它正在监视我的服务。)

import leakcanary.AppWatcher;

...

  onDestroy() {
    super.onDestroy();

    if (AppWatcher.INSTANCE.isInstalled()) {
      AppWatcher.INSTANCE.getObjectWatcher().watch(
        this,
        "MyService received Service#onDestroy() callback"
      );
    }

推荐阅读