Я тщательно обыскивал это в течение нескольких дней и почти ничего не придумал. Каждый другой прочитанный мной случай связан со сборкой мусора.
Я загружаю PNG-изображение размером 4 КБ, которое в основном полностью прозрачное с небольшими белыми "звездочками". Это 1000x750. Просто загрузка этого одного изображения при запуске программы выдает ошибку OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины и E / dalvikvm-heap (3941): внешнее выделение 27000000 байт слишком велико для этого процесса.
С точно таким же кодом у меня нет проблем с загрузкой фонового изображения PNG размером 176 КБ без прозрачности. Это просто "stars1 = BitmapFactory.decodeResource (getResources (), R.drawable.back3c);"
Так есть ли какая-то корреляция, когда декодирование прозрачного PNG занимает безумное количество памяти? И есть ли способ исправить это, кроме использования меньшего изображения?
Если я уменьшу изображение до 500x375, оно загрузится нормально. Я думаю, мне просто интересно, есть ли лучший способ справиться с прозрачным изображением, если это проблема.
Код является почти прямым примером LunarLander. Код, фактически декодирующий растровое изображение:
BitmapFactory.Options options = new BitmapFactory.Options();
options.inTempStorage = new byte[16*1024];
options.inSampleSize = 12;
stars1 = BitmapFactory.decodeResource(getResources(), R.drawable.back4e);
//stars1 = context.getResources().getDrawable(R.drawable.back3c);
//stars2 = context.getResources().getDrawable(R.drawable.back4b);
BackgroundImage = context.getResources().getDrawable(R.drawable.back2);