毕加索清除记忆

时间:2015-06-12 03:31:59

标签: android memory-leaks out-of-memory picasso viewflipper

我在Picasso中使用Picasso加载了许多图片,这些图片位于片段中。当我换成不同的片段时,我想知道图像是否仍在内存中。如果它们在内存中存在,我该如何删除它们。

对于将图像加载到视图鳍状肢的任何其他方法的任何建议将不胜感激。图像位于设备的内部存储器中。

提前致谢。

2 个答案:

答案 0 :(得分:3)

尝试.. setIndicatorsEnabled(true)。它指的是你加载图片的地方。 另外,请查看链接中有关DEBUG INDICATORS的官方文档。 enter link description here

避免毕加索从缓存加载图片。

请设置

.memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE) .networkPolicy(NetworkPolicy.NO_CACHE,NetworkPolicy.NO_STORE)

满足您的需求。

答案 1 :(得分:2)

我有(有?)这样的问题。在我的情况下,它是主 - 详细模式与"画廊"在ViewPager内部和单个图像片段。毕加索自己使用LRU缓存占可用内存的1/7,我不建议改变它 - 99%它只会推迟OOM导致崩溃片刻。 在我的情况下,对图像的引用由其他对象引起,导致泄漏。

在我的案例中有什么帮助: 我玩了一下应用程序让它在内存中增长然后,使用Android设备监视器我创建了hprof转储。 需要使用hdof-conv从sdk(platform-tools目录)转换此文件 翻译文件可以在Eclipse Memory Analyzer Tool中查看(它也可以作为独立应用程序以及Eclipse插件使用)。 不幸的是,寻找大对象并没有帮助 - 正如人们所预料的那样 - 应用程序中有很多用于查看图像的位图。我使用直方图工具来查找大量存在的对象,这是更有用的方法,尤其是在我自己的应用程序包过滤结果之后。最后,我找到了解决自己问题的方法,并采取了以下措施: 我制作了"详细信息"片段单个实例(使用工厂方法的一点点) - 由于未知原因,此类的先前实例保留在内存中,而不是由GC收集。 我将ViewPager更改为RecyclerView,因为ViewPager在内存中保留了太多的备用视图。 我还对连接性做了一些改进,使GC不太可能更好地工作。

我还建议:

使用Picasso的.fit().resize()方法来限制放入图片视图的图片大小。 如果可能,创建适合您需求的图像(需要后端开发)。 经常检查浪费的内存,使这些调查更容易。