问题标签 [leakcanary]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1425 浏览

android - 保留的片段泄漏

我正在使用带有保留片段的简单活动,其中包含活动使用的一些数据。保留的片段使用加载器从内容提供者获取数据。在配置更改(屏幕旋转)时,活动被重新创建并且旧实例被泄漏,正如 LeakCanary 库报告的那样(保留片段 -> 加载器管理器 -> 旧活动)。这与 support-v4 23.0.0 库(以及以前的版本)一起复制。带有保留片段的活动示例,其中复制了泄漏(此处没有有用的代码,仅用于演示泄漏):

来自 LeakCanary 的堆栈:

也许我做错了什么,忘记调用一些closerelease方法?我认为将保留的片段与加载器一起使用是一种常见的模式,这里不应该是内存泄漏。

0 投票
1 回答
251 浏览

memory-leaks - 单独的 LeakCanary 是否足以解决内存泄漏问题?

我已经使用 LeakCanary 有一段时间了。它做得非常好,尤其是考虑到集成到任何人可能拥有的任何应用程序是多么容易时。

但是,仅 LeakCanary 就足以追查这些泄漏吗?我应该在多大程度上依赖它(尤其是在优化生产应用程序时)?

0 投票
0 回答
441 浏览

android - 调用 Places.GeoDataApi.getPlaceById 泄漏了我的 Activity 实例

当我使用Places.GeoDataApi.getPlaceById()LeakCanary 时检测到我的一个实例Activity已泄漏。

这是 LeakCanary 报告的内容

这是我的代码。这两种方法都在 my 中声明PlaceSearchActivity

我不确定是什么导致了问题。任何帮助表示赞赏。谢谢!

更新:还使用以下代码检测到内存泄漏。

这可能是PlayServices图书馆内的问题。我将在一个空项目上对此进行测试,以验证问题。

0 投票
1 回答
1133 浏览

android - 在同时使用构建类型和产品风味时,如何包含 LeakCanary?

LeakCanary文档提到了以下处理构建类型的内容:

但是,如果同时使用多个product flavors呢?我收到Gradle DSL method not found有关buildTypeCompile功能的错误。

这是我当前 Gradle 文件的骨架:

0 投票
3 回答
3334 浏览

android - SharedElement 和自定义 EnterTransition 导致内存泄漏

具有共享元素动画和自定义输入动画会导致活动泄漏。

知道可能是什么原因吗?

09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * com.feeln.android.activity.MovieDetailActivity has leaked: 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * GC ROOT android.app.ActivityThread$ApplicationThread.this$0 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.app.ActivityThread.mActivities 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.util.ArrayMap.mArray 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references array java.lang.Object[].[1] 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.app.ActivityThread$ActivityClientRecord.activity 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references com.feeln.android.activity.MovieDetailActivity.mActivityTransitionState 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.app.ActivityTransitionState.mEnterTransitionCoordinator 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.app.EnterTransitionCoordinator.mEnterViewsTransition 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.transition.TransitionSet.mParent 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.transition.TransitionSet.mListeners 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references java.util.ArrayList.array 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references array java.lang.Object[].[1] 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.transition.TransitionManager$MultiListener$1.val$runningTransitions (anonymous class extends android.transition.Transition$TransitionListenerAdapter) 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references android.util.ArrayMap.mArray 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references array java.lang.Object[].[2] 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * references com.android.internal.policy.impl.PhoneWindow$DecorView.mContext 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * leaks com.feeln.android.activity.MovieDetailActivity instance 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ [ 09-21 16:19:31.007 28269:31066 D/LeakCanary ] * Reference Key: af2b6234-297e-4bab-96e9-02f1c4bca171 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * Device: LGE google Nexus 5 hammerhead 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * Android Version: 5.1.1 API: 22 LeakCanary: 1.3.1 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ * Durations: watch=6785ms, gc=262ms, heap dump=8553ms, analysis=33741ms 09-21 16:19:31.007 28269-31066/com.sample.android D/LeakCanary﹕ [ 09-21 16:19:31.007 28269:31066 D/LeakCanary ]

要重现,您需要有一个大的共享图像动画以及一个自定义 EnterAnimation 和 setEnterSharedElementCallback 。所有这些都来自支持库。

这是我设置 EnterTransition 的方法:

0 投票
1 回答
2872 浏览

android - Leakcanary 使用 AppCompatActivity 和 FragmentStatePagerAdapter 显示片段泄漏

我已经有这个问题一段时间了,我真的不知道还有什么可以尝试的。我把 Leakcanary 卡在我的项目上,这样我就可以强迫自己以“正确的方式”学习 android,而不会发现导致内存泄漏的模式。我正在构建一个应用程序,我已经把它剥离了很多,但我仍然看到这种泄漏发生。

我有一个 Activity,里面有一个 viewpager 并实例化了 10 个片段。如果我打开设备一切似乎都很好,直到我按下“主页”,我才得到以下内存泄漏:

主要活动:

MainActivity 布局:

分段:

片段布局:

0 投票
1 回答
1147 浏览

android - 为什么会发生这种内存泄漏 - android - LeakCanary

我开始使用 Leak Canary,在使用 MapView 旋转片段后,我得到了这个内存泄漏。

这就是我向活动添加片段的方式(我在活动中的 onCreate 中调用它,并在导航菜单中选择项目后)它使用简单的原则,即片段不被破坏但只覆盖地图片段 - 我不必关心保留状态:

和片段代码

知道为什么会发生内存泄漏吗?

0 投票
1 回答
401 浏览

android - 找不到符号类 AndroidExcludedRefs、DisplayLeakService、

我们正在声明我们的泄漏金丝雀依赖项,如项目的 Github 页面上所述。

到目前为止,一切正常。现在我们开始排除这样的已知泄漏:

现在,当我们切换到发布构建类型时,不再找到像 AndroidExcludedRefs、DisplayLeakService 和 ExcludedRefs 这样的类,因为“no-op”依赖项不包括它们。

处理这个问题的最佳方法是什么?

0 投票
1 回答
3606 浏览

android - Android Media player keeps app instance and cause a memory leak

I have an activity with a media player as a member variable.

My media player is initialized like this:

Everything works just fine, and then i override my activity onStop method to release the Media Player.

But after the activity has stopped i get a memory leak report from LeakCanary.

The report is like this:

Yes i have a MyApp class which extends Application and i am holding a reference to MyApp instance in a static field, but i never use that reference in my activity, how can i solve this leak ?

[EDIT]

Here is the code of my Activity:

0 投票
6 回答
42545 浏览

java - 如何使用泄漏金丝雀

我目前在我的应用程序中遇到 OutOfMemoryError。我曾尝试使用 MAT 进行调试,但在一些活动中仍然很难找到泄漏。然后我找到了 LeakCanary,它看起来更简单易用,但是我找不到任何初学者使用 Leak Canary 的分步指南,即使在 Google 上也是如此。我已经通过 build.gradle 中的依赖项安装了 LeakCanary,这就是我目前得到的:

ExampleApplication.java

假设我有一个活动,我希望 LeakCanary 观看一个对象

SampleActivity.java

现在我如何使用 LeakCanary 来查看是哪个对象导致了内存泄漏?