我有一个旧项目
最近,它在制作过程中充满了神秘感OutOfMemoryException
。
我们使用以下命令来找出根本原因
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
implementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
我们还在refWatcher = LeakCanary.install(this);
的{{1}}中呼叫Application
。
但是,在完成上述所有操作并在Emulator中运行之后,我们使用过滤了Android Studio日志
D / LeakCanary
但是,我们看不到任何有关onCreate
的日志。
我们错过了什么吗?
但是,我们看到0输出。
还有其他我们错过的事情吗?
答案 0 :(得分:2)
您不需要添加
implementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
泄漏金丝雀的唯一依赖项是:
debugImplementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
然后在您的Application
onCreate方法中添加以下代码:
@Override
public void onCreate() {
super.onCreate();
if (LeakCanary.isInAnalyzerProcess(this)) {
// This process is dedicated to LeakCanary for heap analysis.
// You should not init your app in this process.
return;
}
LeakCanary.install(this);
// rest of your init code
}
之后,将安装带有以下图标的应用程序:
现在,您只需要运行您的应用即可。当发生内存泄漏时,将显示一个对话框,指出检测到泄漏。
打开带有上述图标的应用程序时,您将看到带有泄漏跟踪的内存泄漏:
答案 1 :(得分:0)
您可以尝试MMAT,这是一个自动的android内存泄漏分析器,MMAT github page
答案 2 :(得分:0)
LeakCanary库现在已升级到2.x版本。
要使用LeakCanary,请在应用程序的build.gradle文件中添加leakcanary-android依赖项
dependencies {
// debugImplementation because LeakCanary should only run in debug builds.
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.4'
}
就是这样,不需要更改代码!
通过过滤Logcat中的LeakCanary标记,确认LeakCanary在启动时运行:
D LeakCanary: LeakCanary is running and ready to detect leaks