我正在开发一个使用Leak Canary Library的Android TV应用程序,但问题是当我使用一段时间后,它显示一个错误“ Dumping Memory。App Freezes。Brrrr”。我在Google上搜索了建议的内容,但仍然出现错误。
清单中,我已提供写入和读取存储的权限。
应用类代码:
public class App extends Application {
private RefWatcher refWatcher;
public static RefWatcher getRefWatcher(Context context) {
App application = (App) context.getApplicationContext();
return application.refWatcher;
}
@Override
public void onCreate() {
super.onCreate();
refWatcher = LeakCanary.install(this);
}
在我的Activity和Fragments中,我在OnDestroy()中使用了RefWatcher。方法。
即
@Override
protected void onDestroy() {
if (timer != null) {
timer.cancel();
timer = null;
}
if (handler != null)
handler.removeCallbacks(Update);
super.onDestroy();
RefWatcher refWatcher = App.getRefWatcher(this);
refWatcher.watch(this);
}
但是仍然出现“转储内存”错误。请帮忙。
答案 0 :(得分:1)
LeakCanary旨在检测应用程序中的内存泄漏。当它显示“正在转储的内存。应用程序冻结。错误”消息时,不是因为您设置的LeakCanary错误,而是因为LeakCanary可以按预期工作并且检测到泄漏。
应用程序冻结,因为LeakCanary必须记录应用程序中每个线程的当前状态和内存,然后向您提供有关检测到的泄漏的报告。
因此,您看到此消息意味着您的应用程序存在内存泄漏,需要修复。在“泄漏” -App,logcat输出或单击弹出的通知中检查您获得的泄漏报告。在该页面中,您应该找到有关泄漏内容的详细信息。
答案 1 :(得分:0)
LeakCanary使用不同类型的依赖项。
debugImplementation "com.squareup.leakcanary:leakcanary-android:1.6.2"
releaseImplementation "com.squareup.leakcanary:leakcanary-android-no-op:1.6.2"
debugImplementation "com.squareup.leakcanary:leakcanary-support-fragment:1.6.2"
如果您的应用处于发布阶段,则lib永远不会出现“正在转储内存。应用冻结。错误”。
这是我初始化LeakCanary的示例。在Application()
类中,在方法onCreate()
中,我调用
private void initLeakCanary() {
if (LeakCanary.isInAnalyzerProcess(this))
return;
LeakCanary.install(this);
}
答案 2 :(得分:0)
如消息所示,LeakCanary冻结应用程序以转储其当前内存以进行分析。这是正常行为,是有意的。您应该收到有关可能检测到的泄漏的更多详细信息的通知。您还可以查看“泄漏”应用程序或应用程序的logcat输出以获取详细信息。