在某些设备上使用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)也会发生预解码吗?
我当然可以通过为图像请求设置调整大小选项来解决这个问题,但我更愿意先了解这项工作的方法。
谢谢!