Fresco Scaling内存问题

时间:2016-09-30 15:49:53

标签: android memory resize scale fresco

在某些设备上使用Fresco im检测时(所有ART,没有Dalvik)都会获得OOM异常。 stacktrace看起来像这样:

java.lang.OutOfMemoryError·Failed to allocate a 1000012 byte allocation with 834924 free bytes and 815KB until OOM
Raw
VMRuntime.java:-2dalvik.system.VMRuntime.newNonMovableArray 
Bitmap.java:-2android.graphics.Bitmap.nativeCreate  
Bitmap.java:908android.graphics.Bitmap.createBitmap 
Bitmap.java:879android.graphics.Bitmap.createBitmap 
Bitmap.java:846android.graphics.Bitmap.createBitmap 
BitmapPool.java:55com.facebook.imagepipeline.memory.BitmapPool.alloc    
BitmapPool.java:30com.facebook.imagepipeline.memory.BitmapPool.alloc    
BasePool.java:259com.facebook.imagepipeline.memory.BasePool.get 
ArtDecoder.java:137com.facebook.imagepipeline.platform.ArtDecoder.decodeStaticImageFromStream   
ArtDecoder.java:120com.facebook.imagepipeline.platform.ArtDecoder.decodeJPEGFromEncodedImage    
ImageDecoder.java:154com.facebook.imagepipeline.decoder.ImageDecoder.decodeJpeg 
ImageDecoder.java:85com.facebook.imagepipeline.decoder.ImageDecoder.decodeImage 
DecodeProducer.java:194com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.doDecode  
DecodeProducer.java:97com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder.access$200 
DecodeProducer.java:129com.facebook.imagepipeline.producers.DecodeProducer$ProgressiveDecoder$1.run

OOM确实有意义,因为该设备有大约800kb的空闲,而图像接近1mb。问题是......为什么会发生? (设备都不同,从Android 5.0到6)。

我们目前没有调整大小,但我们正在设置缩放类型,并且视图具有特定的边界。

另一个问题是:

  • 调整大小是否在预解码中工作?

  • 比例类型(例如CENTER_INSIDE)也会发生预解码吗?

我当然可以通过为图像请求设置调整大小选项来解决这个问题,但我更愿意先了解这项工作的方法。

谢谢!

0 个答案:

没有答案