gpt4 book ai didi

java - Volley NetworkImageView - 如何回收位图?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:17:11 26 4
gpt4 key购买 nike

我对这个出色的库怀念的是它不会在 NetworkImageView 中回收位图。如果在方法 NetworkImageView.onDetachedFromWindow 中某处调用回收将是完美的。目前,该库存在不回收位图和运行 OOM 异常的严重漏洞。有谁知道是否有整合这个概念的计划?

最佳答案

通过“回收位图”,我假设您的意思是在 Bitmap 对象上调用 .recycle()。

为什么您认为这会改善您的 OOM 情况?虽然我承认曾几何时,Android(即 2.x)确实遇到过这个问题。位图存储在 native 堆中,需要(至少)2 次 GC 传递来清理。调用 recycle() 有时会改善这种情况。

自 Android 4.x 3.0 以来,这已不再是问题。

请注意,文档认为这是一个通常不应使用的高级调用: http://developer.android.com/reference/android/graphics/Bitmap.html#recycle()

至于您在 onDetachedFromWindow() 中回收位图的建议,这似乎是个坏主意。当 View 从窗口分离时调用此方法,不能保证 View 以后不会重新附加。如果我们要在 onDetachedFromWindow() 中回收位图,如果 View 重新附加到窗口,我们将抛出异常。

此外,如果需要这样做,我认为 ImageView 本身会处理它。

郑重声明,Volley 通过 尝试在 View 的边界内缩放图像并 一次只允许一个线程解码位图来很好地处理 OOM。

我怀疑您还有其他问题导致了 OOM...

------------ 编辑 --------------

在 android 开发者的评论评论之后,我更新了我的答案。 Volley 不会在 View 的边界内自动缩放图像,但它在 ImageRequest 中支持它(请参阅构造函数:https://android.googlesource.com/platform/frameworks/volley/+/master/src/com/android/volley/toolbox/ImageRequest.java 以及 maxWidth 和 maxHeight)

这意味着您必须修改 NetworkImageView 以使用正确的 ImageRequest 构造函数(您必须小心确保首先测量 View )

关于java - Volley NetworkImageView - 如何回收位图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17360247/

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