Я пытаюсь изменить форматы изображений, используя сжатие растровых изображений, но декодирование некоторых изображений генерирует OOM, поэтому я пришел к следующему:
fun compressImage(filePath: String, sampleRate: Int? = null): Bitmap {
val options = BitmapFactory.Options().apply {
inJustDecodeBounds = true
}
BitmapFactory.decodeFile(filePath, options)
val reqSampleRate = sampleRate ?: calculateInSampleSize(options, maxWidth, maxHeight)
try {
options.inSampleSize = reqSampleRate
options.inPreferredConfig = Bitmap.Config.ARGB_8888
options.inJustDecodeBounds = false
return BitmapFactory.decodeFile(filePath, options)
} catch (e: OutOfMemoryError) {
System.gc()
// increase sample rate to get smaller bitmap size
return compressImage(filePath, reqSampleRate + 2)
}
}
Это хорошая практика, чтобы обернуть потенциальную OOMс попробовать / поймать?или есть другое решение?