【问题标题】:Picasso clear memory [duplicate]毕加索清除记忆[重复]
【发布时间】:2015-06-12 14:12:41
【问题描述】:

我在片段中的视图翻转器中使用毕加索加载了许多图像。我想知道当我更改为不同的片段时图像是否仍在内存中。如果它们持续存在于内存中,我该如何删除它们。

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

提前致谢。

【问题讨论】:

  • 如果您使用的是recyclerView,那么它会负责缓存,但是一旦您关闭应用程序并重新打开它,它就会再次加载图像..
  • 如果您真的对设备上的内存使用情况感到好奇以进行调试...您可以使用developer.android.com/tools/debugging/debugging-memory.html 中指定的一些技术 - 即堆转储和 MAT。跨度>

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


【解决方案1】:

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

为了避免 Picasso 从缓存中加载图像。

请设置

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

满足您的需求。

【讨论】:

    【解决方案2】:

    我有(有?)这样的问题。在我的情况下,它是在 ViewPager 和单个图像片段内带有“画廊”的主细节模式。 Picasso 它自己将 LRU 缓存用于 1/7 的可用内存,我不建议更改它 - 对于 99% 它只会将 OOM 导致的崩溃推迟片刻。 在我的例子中,对图像的引用被其他导致泄漏的对象保留。

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

    我还推荐的是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-10
      • 2014-04-10
      • 2015-02-14
      • 2015-05-07
      • 1970-01-01
      • 2016-12-31
      • 2016-03-17
      • 2019-05-26
      相关资源
      最近更新 更多