Questions tagged «leakcanary»

1
Navigation Arch Component会造成假阳性内存泄漏吗?
我对内存泄漏以及可能导致它们的原因有基本的了解。这就是为什么我不明白我的代码中是否有问题还是误报的原因。我不知道我应该共享代码的哪一部分,因为该项目并不小。但是,请在评论中让我知道,然后我将添加所需的代码。 我使用导航拱形组件并遵循MVVM模式。我在项目开发的后期添加了LeakCanary库,当我在屏幕之间导航时,它立即开始向我发出有关保留实例的警告。 当我将片段添加到后堆栈时,会发生问题。随着向后堆栈中添加的每个片段,保留实例的计数器增加。当达到阈值5时,LeakCanary将转储堆并提供报告。 但是,如果我单击“后退”按钮并返回到先前的屏幕,则保留实例的计数器减少,最终,当返回到第一个屏幕时,所有保留的实例都会消失。 如果我查看堆分析报告,它表示变量coordinatorLayout是CoordinatorLayoutxml中的引用。如果删除该变量及其所有用法,然后再次运行该应用程序,我会看到相同的问题,但是现在有了另一个变量,该变量引用了xml中的另一个视图。我试图删除LeakCanary报告为泄漏的所有视图及其用法。当它说a TextView只是用于设置文本onViewCreated而不在其他地方使用时,正在泄漏,我开始怀疑我的代码是否有问题。 我分析了片段中的生命周期方法调用,并注意到当我导航到先前片段的新屏幕时,直到(包括)所有方法onDestroyView都被调用,但没有被调用onDestroy。当我单击返回时,onDestroy将调用位于后堆栈顶部和保留实例顶部的片段,计数器会减少。 我怀疑导航组件在返回堆栈中时会保留片段的实例,而LeakCanary却将其视为泄漏。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.