gpt4 book ai didi

android - 找出位图的分配位置?

转载 作者:行者123 更新时间:2023-11-29 22:08:13 25 4
gpt4 key购买 nike

我有一个应用程序可以在线程中获取位图,然后将位图放入全局内存缓存中。在 2.2 模拟器上,我在加载足够多的位图(它们在 ListView 中)后出现可重现的内存不足错误:

FATAL EXCEPTION: pool-1-thread-1
java.lang.OutOfMemoryError: bitmap size exceeds VM budget
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
...

堆看起来稳定(3.3mb),我想知道我是否看不到内存量增长,因为我认为在 2.2 操作系统中,位图内存是单独存储的?我一直在做 hprof 转储并在 MAT 中查看它们,我的对象计数看起来符合预期。

在 ICS 手机上运行应用程序不会出现同样的问题(但是,可能只是有更多的内存等)。我认为在后来的操作系统中,他们将位图内存保留为堆的一部分?

无论哪种情况,有没有办法查看我的应用分配了哪些 Bitmap 实例?我认为 hprof 转储仅显示系统范围内的总计数。但我看不到它们是从哪里分配的。

我正在使用:

android.support.v4.util.LruCache<String, Bitmap> 

作为一个内存缓存——在条目被逐出后,位图数据似乎没有被清理(我将缓存设置为 5mb 上限)。我记得 Bitmap 上有类似 recycle() 的方法,也许它们没有得到正确清理?

谢谢

最佳答案

The heap looks stable (3.3mb), and I wonder if I can't see the amount of memory growing because I think in the 2.2 os, bitmap memory is stored separately? I keep doing hprof dumps and viewing them in MAT, and my object counts look as expected.

正确,对于 2.x,您看不到位图使用 MAT 占用的内存(您可以从 ICS 设备进行转储,然后突然看到一个巨大的跳跃)。但是,可用内存量是相同的(尽管因设备而异,但通常在 16 MB 到 32 MB 之间)。解决方案是在内存中保留尽可能少的位图。如果它们只有缩略图大小,您可能会将它们保存在内存中,但通常您无法加载那么多。

关于android - 找出位图的分配位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10269433/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com