2015-06-12 91 views
1

我有许多图像加载使用毕加索在视图鳍片是在一个片段。我想知道当我改变到不同的片段时,图像是否仍然在内存中。如果他们坚持在记忆中,我怎么去除它们。毕加索清除内存

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

在此先感谢。

+1

如果您使用recyclerView,那么它会照顾缓存,但一旦关闭应用程序并重新打开它,它会再次加载图像。 –

+0

如果你真的好奇你的设备上的内存使用情况为了调试......您可以使用https://developer.android.com/tools/debugging/debugging-memory.html中指定的一些技术 - 即堆转储和MAT。 – Zadrox

回答

2

试试.. setIndicatorsEnabled(true)。它指的是你从哪里载入图像。 另外,请查看链接中有关DEBUG INDICATORS的官方文档。 enter link description here

避免毕加索从缓存中加载图像。

请设置

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

您的需求。

1

我有(有?)这样的问题。在我的情况下,它是在ViewPager中的“画廊”和单个图像片段的主 - 细节模式。毕加索它是自己使用LRU缓存的可用内存的七分之一,我不建议改变它 - 对于99%,它只会推迟OOM导致崩溃片刻。 在我的情况下,对图像的引用是由其他引起泄漏的对象保存的。

在我的情况下,什么帮助: 我玩了一段时间的应用程序,使其在内存中增长,然后使用Android设备监视器创建hprof转储。 此文件需要通过sdk(platform-tools目录)中的hprof-conv进行转换。 可以在Eclipse Memory Analyzer Tool中查看翻译后的文件(它也可以作为独立应用程序以及Eclipse插件使用)。 不幸的是,寻找大对象并没有什么帮助 - 正如人们所预料的那样 - 在应用程序中有很多位图用于查看图像。我使用直方图工具来查找存在于大量数据中的对象,特别是在通过我自己的应用程序包过滤结果之后,这种方法更有帮助。最后,我发现我自己的问题的解决方案和采取的行动是: 我做了“细节”片段单个实例(工厂方法有点破解) - 由于未知的原因,这个类的以前的实例保存在内存中,不收集GC 。 我将ViewPager更改为RecyclerView,因为ViewPager在数据偏离过程中在内存中保留了太多的备用视图。 我也对连接进行了一些改进,使它不太频繁地给GC提供更好的工作机会。

什么我也建议更换为:

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