skia Error: Stream size exceeds the limitFailed to create image decoder 'invalid input'setDataSource failed: status = 0x80000000가로 × 세로 × 4byte가로 × 세로 × 2byte (절감 가능)즉, 원본 해상도로 디코딩되는 순간 메모리가 폭발할 수 있음.
Glide에서 같은 .override(width, height)를 걸어도 JPG와 TIFF는 “언제, 어떻게” 크기 축소가 적용되는지가 달라서 메모리 폭증 여부가 갈린다. 핵심은 다운샘플링이 “디코드 단계에서” 일어나는지다.
가장 중요한 포인트는 “언제 줄이느냐”다.
즉, override()는 “최종 결과”를 바꾸는 옵션처럼 보이지만, 디코더가 이를 디코딩 단계에 반영해주지 못하면 메모리 폭증을 막지 못한다.
override(width, height)가 실제로 하는 일Glide의 override()는 단순히 “결과를 그 크기로 보여줘”가 아니라,
즉, 이상적인 경로는 아래다:
override로 target size 결정 → 디코더가 그 size에 맞춰 샘플링(inSampleSize 등) → 작은 비트맵 생성
이때 생성되는 비트맵 크기는 대략:
360×360×2 ≈ 0.25MB 수준반대로, override가 0이거나 디코더가 이를 무시하면:
target size를 못 잡음 → 샘플링이 적용되지 않음 → 원본 해상도(또는 매우 큰 크기)로 디코드 → 대형 비트맵 생성
이 순간 메모리 피크가 폭발한다.
image/tiffoverride(target.width, target.height)가 0인 타이밍target.width/height == 0이 흔함target.width/height == 0 방어 → fallback px 사용override(width, height)로 다운샘플 강제DecodeFormat.PREFER_RGB_565로 썸네일 메모리 절감이번 메모리 폭증은 (1) TIFF 같은 위험 포맷 유입 + (2) override 0 타이밍으로 원본 디코딩 발생 혹은 Glide의 tiff 디코더 미지원이 겹쳐서 생긴 이슈로 정리된다.