cub*_*oft 6 java android android-imageview android-volley
我在这个奇妙的库中想念的是它不会在NetworkImageView中回收位图.如果在方法NetworkImageView.onDetachedFromWindow中调用了某个地方,那将是完美的.目前,该库存在严重泄漏,即不回收位图并运行到OOM异常中.有人知道是否有整合这个概念的计划?
通过“回收位图”,我假设您的意思是在 Bitmap 对象上调用 .recycle() 。
为什么您认为这会改善您的 OOM 情况?虽然我承认,曾几何时,Android(即 2.x)确实遇到过这个问题。位图存储在本机堆中,需要(至少)2 次 GC 进行清理。调用recycle()有时会改善这种情况。
从 Android 4.x 3.0 开始,这个问题就不再那么严重了。
请注意,文档认为这是通常不应使用的高级调用: http://developer.android.com/reference/android/graphics/Bitmap.html#recycle()
至于您建议在 onDetachedFromWindow() 中回收位图,这似乎是一个坏主意。当视图从窗口分离时调用此方法,不能保证视图稍后不会重新附加。如果我们要在 onDetachedFromWindow() 中回收位图,那么如果视图重新附加到窗口,我们就会抛出异常。
此外,如果需要这样做,我认为 ImageView 本身会处理它。
郑重声明,Volley 通过尝试在视图范围内缩放图像并且一次只允许一个线程解码位图,很好地处理了 OOM。
我怀疑您还有其他问题导致 OOM...
- - - - - - 编辑 - - - - - - - -
在android开发者的评论后,我更新了我的答案。Volley 不会自动缩放视图范围内的图像,但它在 ImageRequest 中支持它(请参阅构造函数:https: //android.googlesource.com/platform/frameworks/volley/+/master/src/com/ android/volley/toolbox/ImageRequest.java具有 maxWidth 和 maxHeight)
这意味着您必须修改 NetworkImageView 以使用正确的 ImageRequest 构造函数(您必须小心确保首先测量视图)
| 归档时间: |
|
| 查看次数: |
1708 次 |
| 最近记录: |