【发布时间】:2017-03-08 11:34:01
【问题描述】:
我有一个活动,可以在 ImageViews 中通过滑行加载图片。这是我的滑行代码示例:
Glide.with(ImageVOne.getContext())
.load(geoInfo.getPhotoUrl1())
.skipMemoryCache(true)
.priority(Priority.NORMAL)
.into(ImageVOne);
我加载了 1 到 35 张图片,每张图片应该在 150ko 和 250ko 之间。我不能减少它。
这个活动可以在一个会话中从主活动多次访问,每次它加载不同的图片。例如,第一次是华盛顿的照片,然后是伦敦的照片等。
我的问题是每次启动加载图片的活动时,内存的使用都会增加很多:
我可以启动 3 到 5 次活动,然后应用程序崩溃。错误信息是
java.lang.OutOfMemoryError: Failed to allocate a 1411340 byte allocation with 1126320 free bytes and 1099KB until OOM
我阅读了posts about memory leaks,但我认为 Glide 会避免这个问题。我的图片活动在另一个活动开始之前完成,但分配给我的应用程序的内存似乎没有下降。
我还在清单中的图片活动中添加了android:noHistory="true",但它并没有改变任何东西。
我在我的清单中添加了android:largeHeap="true",但它只是推迟了我的问题(我可以启动图片活动大约 10 到 15 次)并且在应用程序崩溃之前我的图像视图中没有加载很多图片,所以它不是对我来说是一个很好的解决方案。
我也尝试在使用 glide 时添加 .skipMemoryCache (true),但我没有注意到任何变化。
我猜每次我从图片活动转到主要活动时我的“内存使用”应该会减少,然后当我用新图片再次开始我的图片活动时会增加。但从我在蓝色图表上看到的情况来看,它几乎只会增加。你知道我应该怎么做吗?
【问题讨论】:
-
你每次回按都完成了活动?
-
您是否尝试从 Activity 上下文而不是图像上下文调用 glide?我最好的猜测是,因为 Glide 以某种方式持有对图像的引用,所以没有任何东西可以被 GC 处理。将 Glide.with(ImageVOne.getContext()) 改为 Glide.with(this) (this指的是ActivityB)
-
@Alex9494 你可以看看我的回答,可能会有帮助。
-
我认为您可能在某处泄漏了上下文,您是否在活动中使用了任何静态字段?
-
谢谢大家,你们的回答对我帮助很大!我将 Glide.with(ImageVOne.getContext()) 更改为 Glide.with(this) 并解决了一个监听器的问题,现在我可以看到我的内存图上下波动,而不仅仅是上升 :) 我分配的内存约为 200mb ,你觉得太高了吗?
标签: android memory-leaks android-glide